我想在一个类中有一个私有(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/