Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Einführung in den Unterschied zwischen den Konstruktoren _construct() und _initialize() von Klassen in ThinkPHP

Detaillierte Einführung in den Unterschied zwischen den Konstruktoren _construct() und _initialize() von Klassen in ThinkPHP

黄舟
黄舟Original
2018-05-21 11:13:183165Durchsuche

In diesem Artikel wird hauptsächlich der Unterschied zwischen den Konstruktoren _construct() und _initialize() in ThinkPHP vorgestellt. Die Einführung im Artikel ist meiner Meinung nach sehr detailliert. Freunde, die es brauchen. Werfen wir unten einen gemeinsamen Blick darauf.

Vorwort

Ich glaube, dass PHPer, die mit THINKPHP vertraut sind, grundsätzlich mit dieser Methode vertraut sind

Wir verwenden diese Methode selten. _initialize() Sofern Sie kein Plug-In selbst schreiben, wird es selten verwendet. _construct()

Als ich mir heute den Code ansah, sah ich plötzlich die

in PHP integrierte _construct() Konstruktionsmethode . Mein erster Eindruck war, dass sie mir beim Erlernen von Java oft unbekannt war , ich habe es schon lange nicht mehr benutzt. 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 &#39;father&#39;;
  }
}

?>

SonAction.class.php-Datei erstellt

<?php


class SonAction extends FatherAction{
  public function construct(){
    echo &#39;son&#39;;
  }
function index(){

}
}

?>
Führen Sie

in der Unterklasse SonAction aus, um die Ausgabe anzuzeigen. Das Ergebnis: index()

son

Wenn die Unterklasse geändert wird in:

<?php


class SonAction extends FatherAction{
   public function construct(){
    parent::construct();
    echo &#39;son&#39;;
   }
  function index(){

  }
}

?>

Das laufende Ergebnis ist;

fatherson

Die obigen Ergebnisse können geschlossen werden:

Der Konstruktor der übergeordneten Klasse wird nicht automatisch aufgerufen, wenn Sie den Konstruktor der Unterklasse ausführen Rufen Sie es auf und fügen Sie dann

parent::construct()

hinzu. Wenn wir die obige Konstruktormethode in die Methode

ändern, werden wir feststellen, dass das Ergebnis mit dem vorherigen übereinstimmt THINKPHP_initialize() Methode, Sie müssen auch diesen Satz verwenden: _initialize()parent::_initialize()

Bedeutet das, dass der Konstruktor

, der mit PHP geliefert wird, derselbe ist wie die construct()-Methode von THINKPHP? _initialize()

Fügen Sie zunächst zwei Codeteile ein:

<?php


class FatherAction extends Action{
  public function construct(){
    echo &#39;father&#39;;
  }
}

?>
<?php


class SonAction extends FatherAction{
  public function _initialize(){
    echo &#39;son&#39;;
  }


  function index(){

  }

}

?>
Beim Ausführen der Indexmethode der Unterklasse SonAction wird festgestellt, dass das Ausgabeergebnis wie folgt lautet: Vater

Das heißt, die Unterklasse ruft den Konstruktor der übergeordneten Klasse auf, ruft jedoch nicht die

-Methode der Unterklasse auf _initialize()

Fügen Sie zwei Codeteile ein:

<?php


class FatherAction extends Action{
  public function construct(){
    if(method_exists($this,"hello")){
      $this->hello();
    }
    echo &#39;father&#39;;
  }
}

?>
<?php


class SonAction extends FatherAction{
  public function _initialize(){
    echo &#39;son&#39;;
  }
  function index(){

  }

  function hello(){
    echo &#39;hello&#39;;
  }
}

?>
Führen Sie die Indexmethode der Unterklasse SonAction aus und stellen Sie fest, dass das Eingabeergebnis hellofater ist

Daraus können wir die Schlussfolgerung ziehen:

Wenn die übergeordnete Klasse von THINKPHP einen Konstruktor hat, die Unterklasse jedoch nicht, führt THINKPHP den

der Unterklasse nicht aus muss aufgerufen werden. Der Konstruktor muss _initialize() -----------------

auf die gleiche Weise verwenden.

parent::construct() Wenn eine Unterklasse von THINKPHP sowohl ein _initialize()-Konstruktor und Die

-Methode führt nur den

-Konstruktor der Unterklasse aus (ich habe dies persönlich getestet, der obige Code jedoch nicht). construct_initialize()construct

Zusammenfassung

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in den Unterschied zwischen den Konstruktoren _construct() und _initialize() von Klassen in ThinkPHP. 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