Constructeur
__construct ([ mixed $args [, $... ]] ) : void
PHP 5 permet aux développeurs de définir une méthode comme constructeur dans une classe. Les classes avec un constructeur appelleront cette méthode à chaque fois qu'un nouvel objet est créé, elle est donc très appropriée pour effectuer un travail d'initialisation avant d'utiliser l'objet.
(Tutoriel recommandé : Tutoriel php )
Remarque : Si un constructeur est défini dans une sous-classe, le constructeur de sa classe parent ne sera pas implicitement appelé. Pour exécuter le constructeur de la classe parent, vous devez appeler parent::__construct() dans le constructeur de la classe enfant. Si la sous-classe ne définit pas de constructeur, celle-ci sera héritée de la classe parent comme une méthode de classe ordinaire (si elle n'est pas définie comme privée).
Exemple de code :
<?php class BaseClass { function __construct() { print "In BaseClass constructor\n"; } } class SubClass extends BaseClass { function __construct() { parent::__construct(); print "In SubClass constructor\n"; } } class OtherSubClass extends BaseClass { // inherits BaseClass's constructor } // In BaseClass constructor $obj = new BaseClass(); // In BaseClass constructor // In SubClass constructor $obj = new SubClass(); // In BaseClass constructor $obj = new OtherSubClass(); ?>
Pour une compatibilité ascendante, si PHP 5 ne trouve pas la fonction __construct() dans la classe et n'en hérite pas de la classe parent, il essaiera de rechercher l'ancienne- les constructeurs de style, qui sont des fonctions portant le même nom que la classe. Ainsi, le seul cas où un problème de compatibilité survient est lorsque la classe possède déjà une méthode nommée __construct() mais qu'elle est utilisée à d'autres fins.
Contrairement à d'autres méthodes, PHP ne générera pas de message d'erreur E_STRICT lorsque __construct() est remplacé par une méthode avec des paramètres différents de ceux de la classe parent __construct().
Depuis PHP 5.3.3, dans l'espace de noms, les méthodes portant le même nom que le nom de la classe ne sont plus utilisées comme constructeurs. Cette modification n'affecte pas les classes qui ne se trouvent pas dans l'espace de noms.
Exemple de code :
<?php namespace Foo; class Bar { public function Bar() { // treated as constructor in PHP 5.3.0-5.3.2 // treated as regular method as of PHP 5.3.3 } }
Destructor
__destruct ( void ) : void
PHP 5 a introduit le concept de destructeur, qui est similaire à d'autres langages orientés objet, tels que C++. Un destructeur est exécuté lorsque toutes les références à un objet ont été supprimées ou lorsque l'objet est explicitement détruit.
Exemple de code :
<?php class MyDestructableClass { function __construct() { print "In constructor\n"; $this->name = "MyDestructableClass"; } function __destruct() { print "Destroying " . $this->name . "\n"; } } $obj = new MyDestructableClass();
Comme le constructeur, le destructeur de la classe parent ne sera pas appelé secrètement par le moteur. Pour exécuter le destructeur de la classe parent, parent::__destruct() doit être explicitement appelé dans le corps du destructeur de la classe enfant. De plus, tout comme le constructeur, la sous-classe héritera de la classe parent si elle ne définit pas de destructeur.
Le destructeur est appelé même lorsque le script est terminé à l'aide de exit(). L’appel de exit() dans le destructeur annulera les opérations d’arrêt restantes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!