Rowan Collins wrote: > Stanislav Malyshev wrote on 17/12/2014 02:14: >> No, it's not possible. It is possible to call object method in an >> expression, and then use the result of the expression as an array key. >> But to do that you'd have to check that you're dealing with the object >> and the call the special method. > > I think what Christoph was getting at is that you could implement an > object map pretty simply by requiring the objects being added to > implement a particular interface, as in: > > .... > function add ( Hashable $obj ) { > $this->data[ $obj->getHash() ] = $obj; > } > .... > > The main thing that the current RFC would simplify is being able to > accept a mixture of objects and scalars without performing an extra > check; currently, you'd have to write something like this: > > .... > function add ( $scalar_or_obj ) { > if ( is_scalar($scalar_or_obj) ) { > $this->data[ $scalar_or_obj ] = $scalar_or_obj; > } elseif ( $scalar_or_obj instanceOf Hashable ) { > $this->data[ $obj->getHash() ] = $obj; > } else { > throw new InvalidArgumentException; > } > } > .... > > Which is certainly uglier, any maybe was the case that Guilherme had in > mind, but it's not like you have to build a whole new type of data > structure, just add a few lines of implementation.
Yes, that is what I was trying to convey. :) > Compare that to trying to store the actual objects as keys, which would > require a lot more than a few lines of code to emulate in pure PHP. > Luckily, we have SplObjectStorage, which maybe makes that rather less > urgent as well. I agree. However, the RFC mentions a related open issue[1]: | Should SplObjectStorage support calling __hash for an object if it | exists? It might be good to discuss and resolve this issue, as Derick has already pointed out[2]. [1] <https://wiki.php.net/rfc/objkey#open_issues> [2] <http://marc.info/?l=php-internals&m=141881792424772&w=2> -- Christoph M. Becker -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php