我想在一个类中有一个私有(private)属性,并能够通过ReflectionClass设置另一个属性。

我知道,如果我创建类属性的ReflectionProperties,则可以将它们设置为可访问,然后设置其值。

但是,如果将属性设置为可访问,那么它是否可以在任何地方(例如公共(public)属性)访问,还是仅在ReflectionProperty的上下文中可用?

最佳答案

它只能通过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
    ?>

关于php - ReflectionProperty::setAccessible是否可以使该属性永远可访问?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9835393/

10-10 11:07