Je suis en train d'effectuer une sauvegarde/restauration de la fonction de propriétés statiques de classes. Je peux obtenir une liste de toutes les propriétés statiques et leurs valeurs à l'aide de la réflexion des objets getStaticProperties()
méthode. Cela devient à la fois private
et public static
propriétés et leurs valeurs.
Le problème c'est que je ne semble pas obtenir le même résultat lorsque vous essayez de restaurer les propriétés de la réflexion des objets setStaticPropertyValue($key, $value)
méthode. Private
et protected
variables ne sont pas visibles à cette méthode, car ils sont à l' getStaticProperties()
. Semble incohérent.
Est-il possible de définir un privé/protégé de propriété statique de l'aide de la réflexion de classes, ou de toute autre manière pour que la matière?
ESSAYÉ
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();