Heim >Backend-Entwicklung >PHP-Tutorial >Denken Sie über den Unterschied zwischen den Klassenkonstruktoren _construct() und _initialize() in PHP nach
Dieser Artikel stellt hauptsächlich den Unterschied zwischen den Konstruktoren _construct() und _initialize() der Klasse in ThinkPHP vor. Ich glaube, dass er für jeden, der ihn benötigt, einen gewissen Referenzwert hat es zusammen.
Vorwort
Ich glaube, dass PHPer, die mit THINKPHP vertraut sind, grundsätzlich mit dieser Methode vertraut sind _initialize()
Wir verwenden diese Methode selten. _construct()
Sofern Sie kein Plug-In selbst schreiben, wird es selten verwendet.
Als ich mir heute den Code ansah, sah ich plötzlich _construct()
die Konstruktionsmethode, die mit PHP einhergeht. Mein erster Eindruck war, dass sie mir beim Erlernen von Java oft begegnet ist es nach langer Zeit. Normalerweise schreibe ich die wichtigsten Wissenspunkte
in mein kleines Notizbuch, aber ich habe schon lange nicht mehr geschrieben und der elegante und intelligente Schreibstil, den ich in der High School hatte, ist völlig verschwunden in eine andere Dimension. Zusätzlich zu den vorherigen Gedanken habe ich von Technologieexperten gelernt, wie man Blogs schreibt. Dies geschieht nicht, um anzugeben, sondern nur, um zu verhindern, dass die Ergebnisse meiner Arbeit mit der Zeit verschwinden. Werfen wir einen Blick auf die ausführliche Einführung.
Fügen Sie zuerst den Code ein (meine Umgebung ist wamp, ich verwende das TP-Framework):
FatherAction.class erstellt
<?php class FatherAction extends Action{ public function __construct(){ echo 'father'; } } ?>
erstellte SonAction.class.php-Datei
<?php class SonAction extends FatherAction{ public function __construct(){ echo 'son'; } function index(){ } } ?>
Führen Sie index()
in der Unterklasse SonAction aus und Sie können die Ausgabeergebnisse sehen:
son
Wenn Sie die Unterklasse ändern, ist:
<?php class SonAction extends FatherAction{ public function __construct(){ parent::__construct(); echo 'son'; } function index(){ } } ?>
Das laufende Ergebnis ist;
fatherson
Die obigen Ergebnisse können geschlossen werden:
Der Konstruktor der übergeordneten Klasse wird nicht automatisch aufgerufen, wenn der Konstruktor der Unterklasse ausgeführt wird Um es aufzurufen, fügen wir parent::__construct()
hinzu. Wenn wir die obige Konstruktormethode in die THINKPHP_initialize()
-Methode ändern, werden wir feststellen, dass das Ergebnis mit dem vorherigen übereinstimmt Um die _initialize()
-Methode der Klasse zu verwenden, müssen Sie auch diesen Satz verwenden: parent::_initialize()
Bedeutet das, dass der Konstruktor __construct()
, der mit PHP geliefert wird, derselbe ist wie die _initialize()
-Methode von THINKPHP?
Fügen Sie zunächst zwei Codeteile ein:
<?php class FatherAction extends Action{ public function __construct(){ echo 'father'; } } ?>
<?php class SonAction extends FatherAction{ public function _initialize(){ echo 'son'; } function index(){ } } ?>
Beim Ausführen der Indexmethode der Unterklasse SonAction wird festgestellt, dass das Ausgabeergebnis ist: Vater
, dh die Unterklasse ruft den Konstruktor der übergeordneten Klasse auf, ohne die _initialize()
-Methode
Fügen Sie zwei weitere Codeteile ein:
<?php class FatherAction extends Action{ public function __construct(){ if(method_exists($this,"hello")){ $this->hello(); } echo 'father'; } } ?>
<?php class SonAction extends FatherAction{ public function _initialize(){ echo 'son'; } function index(){ } function hello(){ echo 'hello'; } } ?>Ausführen Mit der Indexmethode der Unterklasse SonAction wird festgestellt, dass das Eingabeergebnis hellofater ist Die übergeordnete Klasse von THINKPHP verfügt über einen Konstruktor. Wenn keine Unterklasse vorhanden ist, führt THINKPHP die der Unterklasse nicht aus. Wenn die übergeordnete Klasse und die Unterklassen von THINKPHP alle Konstruktoren haben, müssen Sie zum Aufrufen
-- verwenden Der Konstruktor der übergeordneten Klasse. -------------- Ähnlich; Es wird nur der Unterklasse-Konstruktor ausgeführt (ich habe ihn persönlich getestet, der obige Code hat ihn nicht). Verwandte Empfehlungen:
_initialize()
parent::__construct()
_initialize()
__construct
_initialize()
__construct
Das obige ist der detaillierte Inhalt vonDenken Sie über den Unterschied zwischen den Klassenkonstruktoren _construct() und _initialize() in PHP nach. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!