Próbuję wykonać funkcję kopii zapasowej/przywracania dla właściwości statycznych klas. Mogę uzyskać listę wszystkich właściwości statycznych i ich wartości za pomocą metody odbicia obiektów getStaticProperties()
. Obejmuje to zarówno właściwości, jak i ich wartości: private
i.Czy istnieje sposób na ustawienie prywatnej/chronionej właściwości statycznej za pomocą klas odbicia?
Problem polega na tym, że wydaje mi się, że nie uzyskujemy tego samego wyniku, gdy próbujemy przywrócić właściwości za pomocą metody odbicia obiektów setStaticPropertyValue($key, $value)
. Zmienne private
i protected
nie są widoczne dla tej metody, ponieważ są one dla getStaticProperties()
. Wydaje się niespójne.
Czy istnieje sposób na ustawienie prywatnej/chronionej właściwości statycznej za pomocą klas odbicia lub w jakikolwiek inny sposób?
SPRAWDZONE
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();
To jest całkiem poprawne, prawdopodobnie również chcesz użyć '$ refProperty-> setValue (null, 'new value');', aby ustawić nową wartość zmiennej. – tplaner
Dziękuję @evolve. Nie działało, dopóki nie użyłem setValue(). Dzięki! – dqhendricks
@dqhendricks bez problemu, dobre pytanie. – tplaner