PHP-Konstruktor und Destruktor

伊谢尔伦
Freigeben: 2016-11-23 14:18:47
Original
993 Leute haben es durchsucht

Konstruktor ¶

void__construct ([ gemischt$args [, $... ]] )

PHP 5 ermöglicht Entwicklern, eine Methode als Konstruktor in einer Klasse zu definieren. 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 #1 Verwendung des neuen Standardkonstruktors

class BaseClass
{
function __construct(){
print "In BaseClass constructor<br>";
}
}
class SubClass extends BaseClass
{
function __construct(){
parent::__construct();
print "In SubClass constructor<br>";
}
}
class OtherSubClass extends BaseClass
{}
$obj = new BaseClass();
$obj = new SubClass();
$obj = new OtherSubClass();
Nach dem Login kopieren

Ausgabeergebnis:

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, wird dies versucht Suchen Sie den Konstruktor im alten Stil, bei dem es sich um eine Funktion mit demselben Namen wie die Klasse handelt. Daher treten Kompatibilitätsprobleme nur dann auf, wenn die Klasse bereits über eine Methode namens __construct() verfügt, diese jedoch für andere Zwecke verwendet wird.

Im Gegensatz zu anderen Methoden generiert PHP keine E_STRICT-Fehlermeldung, wenn __construct() von einer Methode mit anderen Parametern als der übergeordneten Klasse __construct() überschrieben wird.

Seit PHP 5.3.3 werden im Namespace Methoden mit demselben Namen wie der Klassenname nicht mehr als Konstruktoren verwendet. Diese Änderung wirkt sich nicht auf Klassen aus, die sich nicht im Namespace befinden.

Beispiel Nr. 2 Konstruktoren in Namespace-Klassen

namespace Foo;
class Bar{
public function Bar(){
//在PHP5.3.0-5.3.2中被看作是构造函数
//自PHP5.3.3起被视作一个普通的方法
}
}
Nach dem Login kopieren

Destruktor ¶

void__destruct (void)

PHP 5 führte den Destruktor ein. Das Konzept ähnelt andere objektorientierte Sprachen wie C. 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<br>";
$this->name = "MyDestructableClass";
}
function __destruct(){
print "Destroying ".$this->name.&#39;<br>&#39;;
}
}
$obj = new MyDestructableClass();
?>
Nach dem Login kopieren

Ausgabeergebnis:

Im Konstruktor

Zerstören von MyDestructableClass

und Konstruktor Ebenso die Der Destruktor der übergeordneten Klasse wird von der Engine nicht heimlich 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 exit() zum Beenden des Skripts verwendet wird. Durch den Aufruf von „exit()“ im Destruktor wird der Rest des Shutdown-Vorgangs 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.


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage