Re: RFC - ReflectionProperty calls __get methods
| From: | Marco Pivetta | Date: | Wed, 19 Jul 2017 08:11:24 +0000 |
| Subject: | Re: RFC - ReflectionProperty calls __get methods | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-99930@lists.php.net to get a copy of this message | ||
On Wed, Jul 19, 2017 at 9:53 AM, Bartłomiej Krukowski <
krukowski.bartlomiej@gmail.com> wrote:
> Hello,
>
> Class *ReflectionProperty* allows to get access to private properties in
> library. Unfortunately there is one unexpected (or at least undocumented)
> case - *ReflectionProperty* tries execute *__call* method. In my opinion
> this approach is bad, because method *__call* can change state of
> application (I'd like to read value, not execute code).
This is expected behavior - the reflection API does not work around the
rules of the engine, just the rules of scope (like closures do).
See https://bugs.php.net/bug.php?id=63463 for a
very similar report that
was discussed and marked as "not a bug" ages ago.
> I'd like to suggest
> different approach:
>
>
> - Method *ReflectionProperty->getValue* will throw exception when
> property is removed.
>
It should just call
__get as before - see also
https://bugs.php.net/bug.php?id=72174 and https://github.com/php/php-
src/commit/a1ed4ab3caf33b59742897b43462d033864bb490 - reflection shouldn't
check if the property exists upfront.
> - Class *ReflectionProperty* will receive new method - *exists*.
>
You can already use array_key_exists($propertyFqn, (array) $object); for
that.
Marco Pivetta
http://twitter.com/Ocramius
http://ocramius.github.com/