Modifier les attributs privés d'un objet PHP

Utilisation des fonctions anonymes pour accéder aux attributs protégés d'une instance.

Pour modifier ou simplement accéder à un attribut privé ou protégé d'un objet, il suffit de créer une fonction anonyme et de les lier ensemble. La méthode Closure::bindTo de PHP, si on lui passe l'objet en premier et second paramètre, permet de simuler l'appartenance de notre nouvelle fonction à cet objet : ainsi $this référencera bien l'objet.

Modifier un attribut déclaré private ou protected

class Foo { private $bar = 42; public function getBar() { return $this->bar; } } $foo = new Foo; $modify_bar = function() { $this->bar = 43; }; $modify_bar = $modify_bar->bindTo($foo, $foo); $modify_bar(); /* Display: int(43) */ var_dump($foo->getBar()); /* Version statique : */ class Foo { protected static $bar = 42; public static function getBar() { return static::$bar; } } $modify_bar = static function() { static::$bar = 43; }; $modify_bar = $modify_bar->bindTo(null, 'Foo'); $modify_bar(); /* Display: int(43) */ var_dump(Foo::getBar());

Bien sûr, c'est à utiliser avec parcimonie, pour des cas de tests par exemple. Si ces attributs ont été protégés, il y a sûrement une bonne raison.