Maison  >  Article  >  développement back-end  >  Exemple de partage de code du destructeur php

Exemple de partage de code du destructeur php

黄舟
黄舟original
2017-07-02 10:18:201097parcourir

Comment comprendre correctement PHPdestructeur

Si vous déclarez une fonction dans une classe et la nommez construction, cette fonction sera considérée comme un constructeur et est exécuté lors de la création d'une instance d'objet. Pour être clair, il existe deux traits de soulignement. Comme toute autre fonction, le constructeur peut avoir des paramètres ou des valeurs par défaut. Vous pouvez définir une classe pour créer un objet et définir toutes ses propriétés.

Vous pouvez également définir une fonction appelée destruct, que PHP appellera avant que l'objet ne soit détruit.

L'héritage est une fonctionnalité puissante des classes One. (sous-classe/classe dérivée) peut hériter des fonctions d'une autre classe (classe parent/classe de base) La classe dérivée contiendra toutes les propriétés et méthodes de la classe de base, et pourra y ajouter d'autres propriétés et méthodes. la classe dérivée. Vous pouvez également remplacer les méthodes et les propriétés de la classe de base. Comme indiqué dans 3.1.2, vous pouvez utiliser le mot-clé extends pour hériter d'une classe

Vous vous demandez peut-être comment les constructeurs sont hérités. elles sont héritées avec d'autres méthodes, elles ne sont pas exécutées lors de la création de l'objet
Si vous avez besoin de cette fonctionnalité, vous devez utiliser l'opérateur :: mentionné au chapitre 2. Il vous permet de pointer. vers un espace de noms . le parent pointe vers l'espace de noms de la classe parent, et vous pouvez utiliser parent::construct pour appeler le constructeur de la classe parent

Certains langages orientés objet nomment le constructeur d'après. la classe. La même chose était vraie pour les premières versions de PHP, et cette méthode fonctionne toujours. Autrement dit : si vous nommez une classe Animal et créez une méthode Si le nom est également une méthode Animal, alors cette méthode est un constructeur If. une classe a à la fois un constructeur de construction et une fonction portant le même nom que la classe, PHP considérera construct comme un constructeur. Cela rend les classes écrites dans les versions PHP précédentes pouvant toujours être utilisées, mais les nouveaux scripts (PHP5) devraient utiliser construct.

La nouvelle façon de déclarer un constructeur par PHP permet au constructeur d'avoir un nom unique, quel que soit le nom de la classe dans laquelle il se trouve. De cette façon, lorsque vous changez le nom de la classe, vous ne le faites pas. Vous n'avez pas besoin de changer le nom du constructeur.

Vous pouvez donner au constructeur une méthode d'accès en PHP comme les autres méthodes de classe. La méthode d'accès affectera ensuite la capacité d'instancier des objets dans une certaine portée. permet l'implémentation de certains modèles de conception fixes, tels que le modèle Singleton

Destructeurs PHP, par opposition aux constructeurs. PHP les appelle pour détruire un objet de la mémoire. Par défaut, PHP libère uniquement la mémoire occupée par le. Les propriétés de l'objet et détruit les ressources associées à l'objet. Les destructeurs vous permettent d'exécuter du code arbitraire pour effacer la mémoire après avoir utilisé un objet.

Lorsque PHP décide que votre script n'est plus Le destructeur PHP sera appelé lorsqu'il est associé à un objet. object. Dans l'espace de noms d'une fonction, cela se produit lorsque la fonction revient. Pour les variables globales, cela se produit à la fin du script. Si vous souhaitez détruire explicitement un objet, vous pouvez attribuer n'importe quelle autre valeur à la variable pointant vers l'objet. Attribuez généralement la variable à NULL ou appelez unset.

Dans l'exemple suivant, comptez le nombre d'objets instanciés à partir de la classe Counter. À partir du constructeur, la valeur est ajoutée et la valeur est décrémentée dans le. Destructeur PHP.

Une fois que vous avez défini une classe, vous pouvez utiliser new pour créer une instance de cette classe. La définition de la classe est le diagramme de conception et l'instance est l'espace réservé des composants sur la chaîne d'assemblage. prend le nom de la classe et renvoie une instance de cette classe. Si le constructeur nécessite des paramètres, vous devez saisir les paramètres après new

 1 < ?php   
 2  3 class Counter { private static $count = 0;   
 4  5 function construct() { self::$count++; }   
 6  7 function destruct() { self::$count--; }   
 8  9 function getCount() { return self::$count; } }   
10 11 //建立第一个实例  12 13 $c = new Counter();  
14 15  //输出1   16 17 print($c->getCount() . "<br>\n");   
18 19 //建立第二个实例   20 21 $c2 = new Counter();   
22 23 //输出2   24 25 print($c->getCount() . "<br>\n");   
26 27 //销毁实例   28 29 $c2 = NULL;   
30 31 //输出1  32 33  print($c->getCount() . "<br>\n");   
34 35 ?>

Lorsque vous créez une nouvelle instance de constructeur d'analyseur PHP, la mémoire sera. prêt à stocker toutes les propriétés. Chaque instance a son propre ensemble de propriétés, mais les méthodes sont partagées par toutes les instances de la classe.

PHP 5 Autoriser les développeurs à définir une méthode en tant que 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 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 n°1 Utilisation du nouveau constructeur standard

<?phpclass 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();?>

Pour une compatibilité ascendante, si PHP 5 ne trouve pas de construction dans la fonction class() et le fait n'en hérite pas de la classe parent, il essaiera de trouver un constructeur à l'ancienne, c'est-à-dire une fonction portant le même nom que la classe. Par conséquent, la seule situation où des problèmes de compatibilité surviendront est lorsqu'il existe déjà une méthode nommée construct() dans la classe mais qu'elle est utilisée à d'autres fins.

与其它方法不同,当 construct() 被与父类 construct() 具有不同参数的方法覆盖时,PHP 不会产生一个 E_STRICT 错误信息

自 PHP 5.3.3 起,在命名空间中,与类名同名的方法不再作为构造函数。这一改变不影响不在命名空间中的类。

Example #2 Constructors in namespaced classes

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


析构函数 ¶

void destruct ( void )

PHP 5 引入了析构函数的概念,这类似于其它面向对象的语言,如 C++。析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。

Example #3 析构函数示例

<?php
class MyDestructableClass {   
function construct() {       
print "In constructor\n";       
$this->name = "MyDestructableClass";
   }   
   function destruct() {       
   print "Destroying " . $this->name . "\n";
   }
}$obj = new MyDestructableClass();?>

和构造函数一样,父类的析构函数不会被引擎暗中调用。要执行父类的析构函数,必须在子类的析构函数体中显式调用 parent::destruct()。此外也和构造函数一样,子类如果自己没有定义析构函数则会继承父类的。

析构函数即使在使用 exit() 终止脚本运行时也会被调用。在析构函数中调用 exit() 将会中止其余关闭操作的运行。

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