void-Konstrukt ([ gemischte $args [, $... ]] )
PHP 5 ermöglicht die Entwicklung oder Definition eine Methode als Konstruktor 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: 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 Nr. 1 Verwendung des neuen Standardkonstruktors
<?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's constructor } // In BaseClass constructor $obj = new BaseClass(); // In BaseClass constructor // In SubClass constructor $obj = new SubClass(); // In BaseClass constructor $obj = new OtherSubClass(); ?>
Ausgabe:
Im BaseClass-Konstruktor
Im BaseClass-Konstruktor
Im SubClass-Konstruktor
Im BaseClass-Konstruktor
Wenn PHP 5 aus Gründen der Abwärtskompatibilität die Funktion „construct()“ in der Klasse nicht finden kann und keine von der übergeordneten Klasse erbt, versucht es, den Konstruktor im alten Stil und die Klassenfunktion zu finden mit dem gleichen Namen. Ein Kompatibilitätsproblem tritt also nur dann auf, wenn die Klasse bereits über eine Methode namens construction() verfügt, diese aber für andere Zwecke verwendet wird.
Im Gegensatz zu anderen Methoden generiert PHP keine E_STRICT-Fehlermeldung, wenn construction() von einer Methode mit anderen Parametern als der übergeordneten Klasse construction() überschrieben wird.
Seit PHP 5.3.3 ist im Namespace die Methode mit demselben Namen wie der Klassenname kein Konstruktor mehr. Diese Änderung wirkt sich nicht auf Klassen aus, die sich nicht im Namespace befinden.
Beispiel Nr. 2 Konstruktoren in Namespace-Klassen
<?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 führte das Konzept der Destruktoren ein, das anderen objektorientierten Sprachen wie C++ ähnelt. Ein Destruktor wird ausgeführt, wenn alle Verweise auf ein Objekt entfernt werden oder wenn das Objekt explizit zerstört wird.
Beispiel Nr. 3 Destruktorbeispiel
<?php class MyDestructableClass { function construct() { print "In constructor\n"; $this->name = "MyDestructableClass"; } function destruct() { print "Destroying " . $this->name . "\n"; } } $obj = new MyDestructableClass(); ?>
Wie der Konstruktor wird auch der Destruktor der übergeordneten Klasse nicht heimlich von der Engine aufgerufen. Um den Destruktor der übergeordneten Klasse auszuführen, muss parent::destruct() explizit im Destruktorkörper der untergeordneten Klasse aufgerufen werden. Darüber hinaus erbt die Unterklasse genau wie der Konstruktor die übergeordnete Klasse, wenn sie keinen Destruktor definiert.
Der Destruktor wird auch dann aufgerufen, wenn das Skript mit exit() beendet wird. Durch den Aufruf von „exit()“ im Destruktor werden die verbleibenden Shutdown-Vorgänge abgebrochen.
Hinweis:
Der Destruktor wird aufgerufen, wenn das Skript geschlossen wird, nachdem alle HTTP-Header gesendet wurden. Es ist möglich, dass das Arbeitsverzeichnis beim Schließen des Skripts ein anderes ist als in einem SAPI (z. B. Apache).
Hinweis:
Der Versuch, eine Ausnahme im Destruktor auszulösen (der aufgerufen wird, wenn das Skript beendet wird), führt zu einem schwerwiegenden Fehler.
Das obige ist der detaillierte Inhalt vonPHP: Detaillierte Erläuterung der Instanzverwendung von Konstruktor und Destruktor. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!