La classe abstraite

Documentation
| Mercredi 04 Juin 2025

Sommaire

(void) function __construct
(array $parameters = array())
(void) function __wakeup
(void)
(array) function __sleep
(void)
(mixed) function __get
(string $name)
(void) function __set
(string $name, mixed $value)
(void) function __call
(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.