On Tue, Jul 10, 2018 at 12:15 PM, Nicolas Grekas <
nicolas.grekas+...@gmail.com> wrote:

> 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/ques
>> tions/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 :)
>

Unfortunately XOR is about as good as just returning the address directly.
XORing the value is basically doing a one-time-pad without the "one-time"
part, aka completely broken. If we wanted to actually hide the address,
we'd have to run it through a proper hash. (Then again, you are right that
spl_object_hash used to do this, so maybe we just don't care...)

Nikita

Reply via email to