Делает ли ReflectionProperty :: setAccessible свойство всегда доступным? - PullRequest
6 голосов
/ 23 марта 2012

Я хотел бы иметь частное свойство в классе и иметь возможность устанавливать его с другим через ReflectionClass.

Я знаю, что если я создаю ReflectionProperties свойств класса, я могу установить для них доступность, а затем установить их значения.

Однако, если я устанавливаю свойство доступным, становится ли оно доступным везде (например, общедоступным свойством) или это просто в контексте ReflectionProperty?

1 Ответ

10 голосов
/ 23 марта 2012

Он будет доступен только через ReflectionProperty::getValue() и ReflectionProperty::setValue(), поэтому видимость исходного класса и всех его экземпляров не будет изменена.

Пример:

    <?php

    class MyClass {
       public function __construct() { $this->priv = 42; }
       private $priv;
    }

    $a = new MyClass();

    $ref = new ReflectionClass("MyClass");

    $prop = $ref->getProperty("priv");
    $prop->setAccessible(TRUE);

    echo "priv: " . $prop->getValue($a) . "\n";  // OK!

    echo $a->priv;                               // <-- error
    ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...