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.
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.
Regards,
--
Rowan Collins
[IMSoP]
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php