On 25 September 2014 09:21, Lester Caine <les...@lsces.co.uk> wrote:
>
> 'This function returns a unique identifier for the object.'
> There is a mistaken view in some usage that that will be DIFFERENT for
> different versions of the same object.

Not sure who has that view. It's quite clearly documented, for the
lifetime of an object, it will always have the same hash.

> So what *IS* returned by spl_object_hash?
> The UCN from 7 years ago flags that the identifier is only based on the
> internal pointers to the object in memory and that the result is not
> user friendly, but without digging into the code, the problems such as
> the fact that re-use of the buffer space by a later object cached in the
> same buffer may be the same as ID?

Yes it is created using various internal pointers, and is about as
user-friendly as any other kind of hash.

It is possible to create a duplicate hash if you unset an object,
force GC collection, and then create a new object which can occupy the
same memory location.

var_dump(spl_object_hash(new stdClass()));
gc_collect_cycles();
var_dump(spl_object_hash(new stdClass()));

This is a fairly unrealistic scenario, however Joe Watkins has
developed a better hash method that doesn't have this flaw, I don't
know if he ever intended to have it applied to core or not.

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to