Maison >développement back-end >tutoriel php >php : analyse des constructeurs et des destructeurs

php : analyse des constructeurs et des destructeurs

黄舟
黄舟original
2017-07-02 10:21:311279parcourir

Cet article présente principalement l'analyse du constructeur et du destructeur en PHP Cet article utilise du codeexemples pour expliquerle constructeur et le destructeur en PHP Fonction, amis. qui en a besoin peuvent se référer à

Constructeur

void construct ([ mixed $args [, $... ]] )

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.

Remarque : Si un constructeur est défini dans une sous-classe, le constructeur de sa classe parent ne sera pas appelé implicitement. 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 n°1 Utilisation du nouveau constructeur standard

<?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&#39;s constructor
}
 
// In BaseClass constructor
$obj = new BaseClass();
 
// In BaseClass constructor
// In SubClass constructor
$obj = new SubClass();
 
// In BaseClass constructor
$obj = new OtherSubClass();
?>

sortie :
Dans le constructeur BaseClass
Dans le constructeur BaseClass
Dans le constructeur Sous-Classe
Dans le constructeur BaseClass

Pour des raisons de 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 trouver l'ancien constructeur, c'est-à-dire, et la fonction de classe avec le même nom. 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 , la méthode portant le même nom que le nom de la classe n'est plus un constructeur. Cette modification n'affecte pas les classes qui ne se trouvent pas dans l'espace de noms.

Exemple n°2 Constructeurs dans des classes à espace de noms

<?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
    }
}
?>

Destructeur

void destruct(void)

PHP 5 a introduit le concept de destructeur, ceci est similaire à d'autres langages orientés objet, tels que le C++. Un destructeur est exécuté lorsque toutes les références à un objet sont supprimées ou lorsque l'objet est explicitement détruit.

Exemple n°3 Exemple de destructeur

<?phpclass 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.

Remarque :
Le destructeur est appelé à la fermeture du script, après que tous les en-têtes HTTP ont été envoyés. Il est possible que le répertoire de travail lorsque le script est fermé soit différent de celui lorsqu'il se trouve dans un SAPI (comme Apache).
Remarque :
Tenter de lever une exception dans le destructeur (qui est appelé à la fin du script) entraînera une erreur fatale.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn