> > If we're seeking for a benefit, it would be by turning this to a >> ReflectionZval insteaf of ReflectionReference. There would be isRef, but >> also getType, etc. But honeslty I'm with you on this, only refs make sense. >> > > I'm wondering if there is any legitimate use for something like this. The > only thing that comes to mind is comparing arrays by identity. E.g. > https://github.com/symfony/symfony/blob/master/src/ > Symfony/Component/VarDumper/Cloner/VarCloner.php#L153 could check > directly check whether an array is the $GLOBALS array. It would also allow > direct recursion detection on arrays (ref https://stackoverflow.com/ > questions/9105816/is-there-a-way-to-detect-circular-arrays-in-pure-php). > Doing the same on just references is nearly the same, but doesn't handle > the $GLOBALS case correctly. >
Note that AFAIK, not only $GLOBALS has a special behavior, but also any "scope" array (the deprecated $context argument of error handlers at least, maybe what get_defined_vars() also? If we can return this info, I would definitely leverage it. If not, that's no blocker, I'll let you decide. > There is a 4th possibility: have a "ReflectionReference::getHash" method, >> that would return a unique string/id per reference (what >> symfony_zval_debug() does.) >> > > Is this the same as my 3rd suggestion with a different name > No, it's the same, I read too fast. > we could return the address hashed with a per-process key. This would make > the function somewhat slower though. > That's exactly what we do in our extension, inspired by spl_object_hash(). On the perf side, a XOR should be OK :) Thanks, Nicolas