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.
#
# Imaginons une classe.
#
class A extends \Lys\AbstractClass
{
public $x;
public $y;
public $z;
}#
# 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
#
# Imaginons une classe.
#
class B extends \Lys\AbstractClass
{
#
# Attention !
#
# Le parent aussi doit se réveiller.
#
function __wakeup()
{
echo 'Hello World !';
return parent::__wakeup();
}
}#
# 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.
#
# 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();
}
}#
# 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.
#
# Imaginons une classe.
#
class D extends \Lys\AbstractClass
{
public $x = 'Hello World !';
public function foo()
{
return true;
}
}#
# Créons notre objet !
#
$obj = new D();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.
#
# 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.
#
# En reprenant l'exemple précédent :
#
$obj->foo(); # Fonctionne.
$obj->bar(); # Lance une UndefinedMethodException.