Heim  >  Artikel  >  Backend-Entwicklung  >  Analyse von Destruktorbeispielen simulierter Klassen in PHP4

Analyse von Destruktorbeispielen simulierter Klassen in PHP4

黄舟
黄舟Original
2017-07-02 10:25:471031Durchsuche

Ein Projekt, an dem ich kürzlich gearbeitet habe, basierte auf PHP4. Ich bin es gewohnt, mit Objekten in PHP5 konfrontiert zu werden. Bei der Konfrontation mit PHP4 werde ich unweigerlich große Beschwerden haben:

wird nicht unterstützt öffentliche, statische, private, geschützte Schlüsselwörter. Das Deprimierendste ist, dass der Destruktor nicht unterstützt wird:

In diesem Artikel wird PHPs register_shutdown_function verwendet, um den Destruktor von zu simulieren eine Klasse in PHP4 Funktion

Wir registrieren den Destruktor im Konstruktor :

class sample{
   var $identified;
   function sample($iden){
       $this->identified = $iden;
      register_shutdown_function(array(&$this, 'destructor')); //模拟析构函数
    }
   function destructor(){
     error_log("destructor executing, Iden is ". $this->identified);
     unset($this);
   }
}
 
 $sample = new sample("laruence");
 $sample2 = new sample("HuiXinchen");

Führen Sie dieses Skript aus, Sie werden feststellen, dass der Destruktor des Objekts korrekt aufgerufen wird
Da wir bei der Registrierung der Abschlussfunktion das Schlüsselwort $this verwendet haben, kann der Destruktor auch dann korrekt aufgerufen werden, wenn Ihre Gegenvariable überschrieben wird, z. B.:

class sample{
   var $identified;
   function sample($iden){
       $this->identified = $iden;
      register_shutdown_function(array(&$this, 'destructor')); //模拟析构函数
    }
   function destructor(){
     error_log("destructor executing, Iden is ". $this->identified);
     unset($this);
   }
}
 
 $sample = new sample("laruence");
 
 $sample = "laruence"; //覆盖对象变量

$sample wird überschrieben, aber wann Wenn Sie dieses Skript ausführen, werden Sie feststellen, dass der Destruktor immer noch korrekt aufgerufen werden kann:

class sample{
   var $identified;
   function sample($iden){
       $this->identified = $iden;
      register_shutdown_function(array(&$this, 'destructor')); //模拟析构函数
    }
   function destructor(){
     error_log("destructor executing, Iden is ". $this->identified);
     unset($this);
   }
}
 
 $sample = new sample("laruence");
 unset($sample);

Der Destruktor kann immer noch korrekt aufgerufen werden

Das obige ist der detaillierte Inhalt vonAnalyse von Destruktorbeispielen simulierter Klassen in PHP4. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn