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

Reply via email to