Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:63274 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 39766 invoked from network); 8 Oct 2012 02:00:32 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 8 Oct 2012 02:00:32 -0000 Authentication-Results: pb1.pair.com header.from=rasmus@mindplay.dk; sender-id=unknown Authentication-Results: pb1.pair.com smtp.mail=rasmus@mindplay.dk; spf=permerror; sender-id=unknown Received-SPF: error (pb1.pair.com: domain mindplay.dk from 209.85.212.42 cause and error) X-PHP-List-Original-Sender: rasmus@mindplay.dk X-Host-Fingerprint: 209.85.212.42 mail-vb0-f42.google.com Received: from [209.85.212.42] ([209.85.212.42:47203] helo=mail-vb0-f42.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id A2/46-07529-EB332705 for ; Sun, 07 Oct 2012 22:00:31 -0400 Received: by mail-vb0-f42.google.com with SMTP id fs19so4073885vbb.29 for ; Sun, 07 Oct 2012 19:00:28 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:x-gm-message-state; bh=vsdDXMUZAz+vNlsuzekwKcH9fuRqXIPljawDSIpWPJA=; b=nLqXyJQYKQRMnzNrSDu0r4OQXpSsDHdhAUc4sU79mWBH1k7zYkBmGrBwn1hjumB+9Y m1bY6g+5bK2sZQZNk1YT7Mx4U37/Hpd6OSp4tOXjqK5kgZSE9LyXiD+B0hNDg/oEzk/I dIjtip5P3HJl0TE1QVTPGta7b5M+D5a5Hg2zAp+8pWHOgVYlaNZWPCYjxSmASOwyc1C1 B3+OYMao/Y71AeMGu6oNL6u66zUqkXQzvgElPTQTi5up05rsu9oupyd87j7F/NvmBVkX X6ty1NCw7MXs6/USU3J3n+wG4HTBplZxh2ljhjq6ovy3HYMF4dF9uy3d4oMTIN4X5XaS WNBA== MIME-Version: 1.0 Received: by 10.220.240.135 with SMTP id la7mr888951vcb.44.1349661628070; Sun, 07 Oct 2012 19:00:28 -0700 (PDT) Received: by 10.58.146.103 with HTTP; Sun, 7 Oct 2012 19:00:27 -0700 (PDT) In-Reply-To: References: <20121007200604.CGVT23973.aamtaout03-winn.ispmail.ntl.com@p2> Date: Sun, 7 Oct 2012 22:00:27 -0400 Message-ID: To: internals@lists.php.net Content-Type: text/plain; charset=ISO-8859-1 X-Gm-Message-State: ALoCoQlSjWQVkAOAWAQGES9xvp4pjxN3LWiiQYjptY89eMLZosyDhhzUUBfi/eDzPDNYUvb89Bz8 Subject: Re: [PHP-DEV] Re: Arrays which have properties of sets From: rasmus@mindplay.dk (Rasmus Schultz) looks like you're right - spl_object_hash() does in deed work... I guess I was mislead by some of the notes people made in the documentation... perhaps these should be moderated, and the documentation should be update to clear up some of the mystery and confusion that seems to surround this function? http://us3.php.net/manual/en/function.spl-object-hash.php#110242 "Changing the state of an object does not affect the result" - well of course not, since spl_object_hash() does not in fact seem to hash the "object", or at least not it's state. http://us3.php.net/manual/en/function.spl-object-hash.php#95666 "The unique identifiers of destroyed objects can and will be reused" - this could be demonstrated more clearly by using unset() ... though I understand it now, this example made me think at first that keys would just be reused at random... http://us3.php.net/manual/en/function.spl-object-hash.php#94647 "It seems that when switching scopes, the last one is repeated" - that's not at all what's happening in this extremely misleading example... rather, spl_object_hash(new stdClass()) creates an object that immediately falls out of scope and gets destroyed, at which point the same key may be reused in a different scope OR even in the same. http://us3.php.net/manual/en/function.spl-object-hash.php#94060 this seems to demonstrate an alternative approach, but as pointed out by Sherif, this is not the same thing at all. http://us3.php.net/manual/en/function.spl-object-hash.php#91164 "The spl hash will always be the same for a given object, regardless of content" - this is definitely not the case. http://us3.php.net/manual/en/function.spl-object-hash.php#90296 http://us3.php.net/manual/en/function.spl-object-hash.php#87422 Both attempt to implement spl_object_hash() in older versions of PHP, but both are extremely misleading since they have essentially nothing in common with spl_object_hash() as such. http://us3.php.net/manual/en/function.spl-object-hash.php#76220 This actually clarifies something things that probably should be explained in the documentation. It's perhaps the worst case of misleading user comments to date... ;-) On Sun, Oct 7, 2012 at 7:51 PM, Sherif Ramadan wrote: > On Sun, Oct 7, 2012 at 7:12 PM, Rasmus Schultz wrote: >> the manual states, "The implementation in SplObjectStorage returns the >> same value as spl_object_hash()" - so I don't know how this would >> really work any better than a custom implementation. >> >> perhaps safer would be to simply implement a collection-type that >> requires the classes of elements in the collection to implement an >> interface, exposing a unique key... and for objects that don't have a >> unique key, generate sequential keys from a static counter in each >> class... not ideal if you want to implement a document store that can >> store "anything", since now every stored object/class needs to provide >> a key... >> > > How is that safer? If anything this introduces every aspect of being > unsafe since relies on a user implementation that may or may not exist > and may or may not be unique. As opposed to spl_object_hash, which can > actually identify objects uniquely by looking at the internal symbol > table that exposes all the objects in memory. > >> On Sun, Oct 7, 2012 at 4:06 PM, Jared Williams >> wrote: >>> >>> See SPL's SplObjectStorage. That allows object instances as keys. >>> >>> Jared >> >> -- >> PHP Internals - PHP Runtime Development Mailing List >> To unsubscribe, visit: http://www.php.net/unsub.php >>