Sommaire
(array $parameters = array())
(void)
(void)
(string $name)
(string $name, mixed $value)
(string $name, array $args = array())
L'idée de l'AbstractClass est de disposer d'une classe pouvant être instancier en proposant à la méthode __construct un tableau de variables de tout type.
Son initialisation est alors reportée à la méthode __wakeup.
Ainsi, en cas de désérialisation, l'objet est tout de même initialisé.
Cette stratégie permet l'utilisation d'une usine d'objets et ainsi une inversion de contrôle dans l'instanciation des classes.
Méthode __construct
Elle sert à instancier la classe via le passage d'un tableau de variables.
<?php # # Imaginons une classe. # class A extends \Lys\AbstractClass { public $x; public $y; public $z; }
<?php # # Créons notre objet ! # $obj = new A(array( 'x' => 1, 'y' => array('ok'), 'z' => new A(), ));
Méthode __wakeup
La méthode __construct étant finale, il fallait un moyen d'initialiser notre objet.
En reportant cela à la méthode __wakeup, on s"assure qu'une instanciation de la classe aura le même résultat que la désérialisation de l'objet
<?php # # Imaginons une classe. # class B extends \Lys\AbstractClass { # # Attention ! # # Le parent aussi doit se réveiller. # function __wakeup() { echo 'Hello World !'; return parent::__wakeup(); } }
<?php # # Créons notre objet ! # $obj = new B(); # Affiche: Hello World ! $str = serialize($obj); $obj = unserialize($str); # Affiche: Hello World !
Méthode __sleep
La méthode __sleep permet de nettoyer l'objet avant la sérialisation. Avouons qu'elle est peu utilisée.
<?php # # Imaginons une classe. # class C extends \Lys\AbstractClass { # # Attention ! # # Le parent aussi doit aller se coucher. # function __sleep() { echo 'I’m tired...'; return parent::__sleep(); } }
<?php # # Créons notre objet ! # $obj = new C(); $str = serialize($obj); # Affiche: I’m tired...
Méthode __get
Cette méthode intersepte les accés aux propriétés qui n'ont pas été définies et lance une UndefinedPropertyException.
<?php # # Imaginons une classe. # class D extends \Lys\AbstractClass { public $x = 'Hello World !'; public function foo() { return true; } }
<?php # # Créons notre objet ! # $obj = new D();
<?php echo $obj->x; # Affiche : Hello World ! echo $obj->a; # Lance une UndefinedPropertyException.
Méthode __set
Cette méthode intersepte les affectations des propriétés qui n'ont pas été définies et lance une UndefinedPropertyException.
<?php # # En reprenant l'exemple précédent : # $obj->x = 'Foo !'; # Fonctionne. $obj->a = 'Bar !'; # Lance une UndefinedPropertyException.
Méthode __call
Cette méthode intersepte les appels aux méthodes qui n'ont pas été définies et lance une UndefinedMethodException.
<?php # # En reprenant l'exemple précédent : # $obj->foo(); # Fonctionne. $obj->bar(); # Lance une UndefinedMethodException.
