gpt4 book ai didi

php - 有没有办法使用反射类设置私有(private)/ protected 静态属性?

转载 作者:IT老高 更新时间:2023-10-28 12:06:19 26 4
gpt4 key购买 nike

我正在尝试为类的静态属性执行备份/恢复功能。我可以使用反射对象 getStaticProperties() 方法获取所有静态属性及其值的列表。这将获取 privatepublic static 属性及其值。

问题是我在尝试使用反射对象 setStaticPropertyValue($key, $value) 方法恢复属性时似乎没有得到相同的结果。 privateprotected 变量对于此方法不可见,因为它们对于 getStaticProperties() 可见。似乎不一致。

有没有办法使用反射类或其他任何方式设置私有(private)/ protected 静态属性?

尝试过

class Foo {
static public $test1 = 1;
static protected $test2 = 2;

public function test () {
echo self::$test1 . '<br>';
echo self::$test2 . '<br><br>';
}

public function change () {
self::$test1 = 3;
self::$test2 = 4;
}
}

$test = new foo();
$test->test();

// Backup
$test2 = new ReflectionObject($test);
$backup = $test2->getStaticProperties();

$test->change();

// Restore
foreach ($backup as $key => $value) {
$property = $test2->getProperty($key);
$property->setAccessible(true);
$test2->setStaticPropertyValue($key, $value);
}

$test->test();

最佳答案

为了访问类的私有(private)/ protected 属性,我们可能需要首先使用反射设置该类的可访问性。试试下面的代码:

$obj         = new ClassName();
$refObject = new ReflectionObject( $obj );
$refProperty = $refObject->getProperty( 'property' );
$refProperty->setAccessible( true );
$refProperty->setValue(null, 'new value');

关于php - 有没有办法使用反射类设置私有(private)/ protected 静态属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6448551/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com