我试图为类的静态属性执行备份/恢复功能。我可以使用反射对象getStaticProperties()方法获得所有静态属性及其值的列表。这将获得私有和公共静态属性及其值。
问题是,我似乎没有得到相同的结果,当尝试恢复与反射对象setStaticPropertyValue($ key,$ value)方法的属性。私有和受保护的变量对于此方法不可见,因为它们是getStaticProperties()。似乎不一致。
有什么办法使用反射类或任何其他方式设置私有/受保护的静态属性?
TRIED
class foo {
static public $test1 = 1;
static protected $test2 = 2;
public function test() {
echo self::$test1 . '
';
echo self::$test2 . '
' . '
';
}
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();