Heim  >  Artikel  >  Backend-Entwicklung  >  Beispielcode für die gemeinsame Nutzung eines PHP-Destruktors

Beispielcode für die gemeinsame Nutzung eines PHP-Destruktors

黄舟
黄舟Original
2017-07-02 10:18:201104Durchsuche

So verstehen Sie PHPDestruktor

Wenn Sie eine Funktion in einer Klasse deklarieren und sie Konstrukt nennen, wird diese Funktion als Konstruktor betrachtet und ist es auch Zur Klarstellung: Wie jede andere Funktion kann der Konstruktor eine Klasse zum Erstellen eines Objekts definieren und alle seine Eigenschaften festlegen Anweisung.

Sie können auch eine Funktion namens „destruct“ definieren, die PHP aufruft, bevor das Objekt zerstört wird.

Vererbung ist eine leistungsstarke Funktion der Klasse One (Unterklasse/abgeleitete Klasse) kann die Funktionen einer anderen Klasse (Elternklasse/Basisklasse) erben. Die abgeleitete Klasse enthält alle Eigenschaften und Methoden der Basisklasse und kann weitere Eigenschaften und Methoden hinzufügen Sie können auch die Methoden und Eigenschaften der Basisklasse überschreiben. Wie in 3.1.2 gezeigt, können Sie das Schlüsselwort „extends“ verwenden, um eine Klasse zu erben Sie werden zusammen mit anderen Methoden vererbt und nicht ausgeführt, wenn Sie

das Objekt erstellen

. Wenn Sie diese Funktionalität benötigen, müssen Sie den in Kapitel 2 erwähnten ::-Operator verwenden. Er ermöglicht Ihnen das Zeigen auf einen -Namespace
. Sie können parent::construct verwenden, um den Konstruktor der übergeordneten Klasse aufzurufen. Einige objektorientierte Sprachen benennen den Konstruktor danach Das Gleiche galt für die ersten Versionen von PHP, und diese Methode funktioniert immer noch: Wenn Sie eine Klasse „Animal“ nennen und eine „Animal“-Methode erstellen, ist diese Methode ein Konstruktor Eine Klasse verfügt sowohl über einen Konstruktor als auch über eine Funktion mit demselben Namen wie die Klasse. PHP betrachtet den Konstruktor als Konstruktor. Dadurch können Klassen, die in früheren PHP-Versionen geschrieben wurden, weiterhin verwendet werden. Neue Skripte (PHP5) sollten jedoch den Konstruktor verwenden.

PHPs neue Art, einen Konstruktor zu deklarieren, ermöglicht es dem Konstruktor, unabhängig vom Namen der Klasse, in der er sich befindet, einen eindeutigen Namen zu haben Sie müssen den Namen des Konstruktors nicht wie andere Klassenmethoden ändern. Die Zugriffsmethode wirkt sich auf die Fähigkeit aus, Objekte innerhalb eines bestimmten Bereichs zu instanziieren Ermöglicht die Implementierung einiger fester Entwurfsmuster, wie z. B. des Singleton-Musters, im Gegensatz zu Konstruktoren, die PHP aufruft, um ein Objekt aus dem Speicher zu löschen Objekteigenschaften und zerstört die mit dem Objekt verbundenen Ressourcen. Mit Destruktoren können Sie beliebigen Code ausführen, um den Speicher nach der Verwendung eines Objekts zu löschen.

Wenn PHP entscheidet, dass Ihr Skript nicht mehr aufgerufen wird, wird der PHP-Destruktor aufgerufen, wenn er mit einem verknüpft ist Objekt. Dies geschieht, wenn die Funktion am Ende des Skripts zurückkehrt. Wenn Sie ein Objekt explizit zerstören möchten, können Sie der Variablen, die auf das Objekt zeigt, einen beliebigen anderen Wert zuweisen. Weisen Sie der Variablen normalerweise den Wert NULL zu oder rufen Sie unset auf.

Zählen Sie im folgenden Beispiel die Anzahl der aus der Klasse Counter instanziierten Objekte. Ausgehend vom Konstruktor wird der Wert addiert und der Wert davon subtrahiert PHP-Destruktor.

Sobald Sie eine Klasse definiert haben, können Sie mit new eine Instanz der Klasse erstellen, und die Instanz ist der Platzhalter Components auf der Montagelinie Nimmt den Namen der Klasse und gibt eine Instanz dieser Klasse zurück. Wenn der Konstruktor Parameter erfordert, sollten Sie die Parameter nach „new“ eingeben Bereit, alle Eigenschaften zu speichern. Methoden werden jedoch von allen Instanzen der Klasse gemeinsam genutzt.

PHP 5 ermöglicht es Entwicklern, eine Methode als Konstruktor zu definieren in einer Klasse. Klassen mit einem Konstruktor rufen diese Methode jedes Mal auf, wenn ein neues Objekt erstellt wird. Sie eignet sich daher sehr gut für einige Initialisierungsarbeiten vor der Verwendung des Objekts.

Hinweis:
 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 ?>
Wenn ein Konstruktor in einer Unterklasse definiert ist, wird der Konstruktor seiner übergeordneten Klasse nicht implizit aufgerufen. Um den Konstruktor der übergeordneten Klasse auszuführen, müssen Sie

parent::construct() im Konstruktor der untergeordneten Klasse aufrufen. Wenn die Unterklasse keinen Konstruktor definiert, wird sie wie eine gewöhnliche Klassenmethode von der übergeordneten Klasse geerbt (sofern sie nicht als privat definiert ist).

Beispiel #1 Verwendung des neuen Standardkonstruktors

Aus Gründen der Abwärtskompatibilität, wenn PHP 5 kein Konstrukt in der Funktion class() finden kann und dies tut Wenn Sie keinen von der übergeordneten Klasse erben, wird versucht, einen Konstruktor im alten Stil zu finden, d. h. eine Funktion mit demselben Namen wie die Klasse. Daher treten Kompatibilitätsprobleme nur dann auf, wenn in der Klasse bereits eine Methode namens construct() vorhanden ist, diese jedoch für andere Zwecke verwendet wird.

与其它方法不同,当 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() 将会中止其余关闭操作的运行。

Das obige ist der detaillierte Inhalt vonBeispielcode für die gemeinsame Nutzung eines PHP-Destruktors. 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