Le constructeur d'une classe définit ce qui se passe lorsque vous instanciez un objet de cette classe. Le destructeur d'une classe définit ce qui se passe quand vous détruisez l'instance de l'objet.
Voir le Manuel PHP sur les Constructeurs et Destructeurs:
PHP 5 permet aux développeurs de déclarer les méthodes constructeur pour les classes. Les Classes qui ont un constructeur appel de la méthode cette méthode sur chaque objet nouvellement créé, de sorte qu'il est adapté pour toute initialisation de l'objet peut avoir besoin avant de l'utiliser.
et
PHP 5 introduit un destructeur concept similaire à celle des autres langages orientés objet (C++. Le destructeur méthode sera appelée dès que toutes les références à un objet particulier sont supprimés ou lorsque l'objet est explicitement détruit ou dans n'importe quel ordre dans la séquence d'arrêt.
Dans la pratique, vous devez utiliser le Constructeur pour mettre l'objet dans un minimum d'état valide. Cela signifie que vous attribuez les arguments passés au constructeur pour les propriétés de l'objet. Si votre objet utilise une sorte de types de données qui ne peuvent être attribués directement à un titre de propriété, vous créez ici, par exemple
class Example
{
private $database;
private $storage;
public function __construct($database)
{
$this->database = $database;
$this->storage = new SplObjectStorage;
}
}
Notez que pour garder vos objets testable, un constructeur ne doit pas faire de réel travail:
Travail dans le constructeur comme: création/initialisation des collaborateurs, la communication avec les autres services, et la logique pour mettre en place son propre état supprime les coutures nécessaires pour les tests, forçant les sous-classes/se moque d'hériter d'un comportement indésirable. Trop de travail dans le constructeur empêche l'instanciation ou de modifier des collaborateurs dans le test.
Dans ce qui précède Example
, l' $database
est un collaborateur. Il a un cycle de vie et le but de son propre et pourrait être une instance partagée. Vous le créez pas à l'intérieur du constructeur. D'autre part, l' SplObjectStorage
est une partie intégrante de l' Example
. Il a le même cycle de vie et n'est pas partagée avec d'autres objets. Ainsi, il est possible d' new
dans le ctor.
De même, vous utilisez le destructeur de nettoyer après votre objet. Dans la plupart des cas, c'est inutile parce que c'est géré automatiquement par PHP. C'est pourquoi vous verrez beaucoup plus ctors que dtors dans la nature.