Les méthodes magiques
Les méthodes magiques sont des méthodes spéciales qui écrase l'action par défaut de PHP quand certaines actions sont réalisées sur un objet.
Les méthodes suivantes sont considérées magiques :
__construct()
__destruct()
__call()
__callStatic()
__get()
__set()
__isset()
__unset()
__sleep()
__wakeup()
__serialize()
__unserialize()
__toString()
__invoke()
__set_state()
__clone()
__debugInfo()
Exemple __construct()
__construct(mixed ...$values = ""): void
PHP permet aux développeurs de déclarer des constructeurs pour les classes. Les classes qui possèdent une méthode constructeur appellent cette méthode à chaque création d'une nouvelle instance de l'objet, ce qui est intéressant pour toutes les initialisations dont l'objet a besoin avant d'être utilisé.
Exemple :
<?php
class BaseClass {
function __construct() {
print("Dans le constructeur de BaseClass\n");
}
}
class SubClass extends BaseClass {
function __construct() {
parent::__construct();
print("Dans le constructeur de SubClass\n");
}
}
class OtherSubClass extends BaseClass {
// Constructeur hérité de BaseClass
}
// Dans le constructeur de BaseClass
$obj = new BaseClass();
// Dans le constructeur de BaseClass
// Dans le constructeur de SubClass
$obj = new SubClass();
// Dans le constructeur de BaseClass
$obj = new OtherSubClass();
?>
Exemple : arguments dans le constructeur
<?php
class Point {
protected int $x;
protected int $y;
public function __construct(int $x, int $y = 0) {
$this->x = $x;
$this->y = $y;
}
}
$p1 = new Point(4, 5);
$p2 = new Point(4);
$p3 = new Point(y: 5, x: 4);
?>
Exemple __destruct()
__destruct(): void
PHP possède un concept de destructeur similaire à celui d'autres langages orientés objet, comme le C++. La méthode destructeur est appelée dès qu'il n'y a plus de référence sur un objet donné, ou dans n'importe quel ordre pendant la séquence d'arrêt.
Exemple :
<?php
class MyDestructableClass
{
function __construct() {
print("In constructor\n");
}
function __destruct() {
print("Destroying " . __CLASS__ . "\n");
}
}
$obj = new MyDestructableClass();
Tout comme le constructeur, le destructeur parent ne sera pas appelé implicitement par le moteur. Pour exécuter le destructeur parent, vous devez appeler explicitement la fonction parent::__destruct
dans le corps du destructeur. Tout comme les constructeurs, une classe enfant peut hériter du destructeur du parent s'il n'en implémente pas un lui-même.
Le destructeur sera appelé même si l'exécution du script est stoppée en utilisant la fonction exit()
. Appeler la fonction exit()
dans un destructeur empêchera l'exécution des routines d'arrêt restantes.
Exemple __sleep() et __wakeup()
Besoin d'aide ?
Rejoignez notre communauté officielle et ne restez plus seul à bloquer sur un problème !