S'il vous plaît, parlez-moi du problème du destructeur php
<?php class a{ static $ss=null; function ff($p){ self::$ss=$p; return self::$ss; } function destruct(){ echo "一二三"; } } $rrrr=new a(); echo $rrrr->ff(4444); $aaaa=new a(); echo $aaaa->ff(55555);
======================== =
Résultat de sortie : 444455555 un deux trois un deux trois
========================
Ce que je veux demander est : le destructeur n'est-il pas exécuté après la destruction de l' objet ? Lorsque l'objet $rrrr est exécuté, l'objet $rrrr aurait dû être détruit lorsque $aaaa est exécuté. un" du destructeur devrait être affiché. "Deux trois" Mais le résultat que nous voyons est 444455555 un deux trois un deux trois. Je pense que le résultat devrait être 4444 un deux trois 55555 un deux trois. C'est vrai
Ce n'est pas comme ça. unset($rrrr) peut déclencher la destruction d'un objet, mais pas new a(). Vous venez d'obtenir deux instances de a et n'avez pas effectué de destruction.
Une fois la visite de la page terminée, php détruit automatiquement les instances $rrrr et $aaaa, donc un, deux et trois sont affichés deux fois de suite.
Merci, mais c'est du mode cas unique
static $ss Lorsque cette variable de classe est réaffectée, la précédente ne sera-t-elle pas détruite ?
Cher client, le vôtre n'est pas un mode singleton... c'est juste un objet ordinaire avec des attributs statiques, et même s'il s'agit d'un mode singleton, il n'utilisera pas de destructeur. Il faut être très prudent lors de l'apprentissage du programme, les détails sont tellement importants. Il s'agit d'un singleton
class singleDemo { protected static $instance = false; protected construct() { } public static function getInstance() { if (! self::$instance instanceof self) { self::$instance = new self(); } return self::$instance; } }
singleton, ce qui signifie que vous ne pouvez utiliser que la même instance. Il faut trop de mots pour en parler. Puisque vous connaissez le mode singleton, allez simplement à la description de celui-là
Le destructeur est le code appelé lorsque l'objet est détruit.
Lorsque cet objet est épuisé, les instructions de cette fonction seront automatiquement exécutées.
Votre objet n'a pas été utilisé pour tout le fichier. Il ne sera utilisé qu'après la sortie de 55555. Comme il est appelé deux fois, il y a deux un, un, deux et trois à la fin ! J'espère l'adopter !
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!