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.


# Imaginons une classe. 

class 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 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 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 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->'Foo !'# Fonctionne. 
$obj->'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.