Heim  >  Artikel  >  Backend-Entwicklung  >  Denken Sie über den Unterschied zwischen den Klassenkonstruktoren _construct() und _initialize() in PHP nach

Denken Sie über den Unterschied zwischen den Klassenkonstruktoren _construct() und _initialize() in PHP nach

不言
不言Original
2018-06-07 11:20:381726Durchsuche

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 &#39;father&#39;;
  }
}

?>

erstellte SonAction.class.php-Datei

<?php


class SonAction extends FatherAction{
  public function __construct(){
    echo &#39;son&#39;;
  }
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 &#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 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 &#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 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 &#39;father&#39;;
  }
}

?>

<?php


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

  }

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

?>

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()

ThinkPHP verwendet die Upload-Klasse UploadFile

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!

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