Maison >développement back-end >tutoriel php >Pensez à la différence entre le constructeur de classe _construct() et _initialize() en PHP

Pensez à la différence entre le constructeur de classe _construct() et _initialize() en PHP

不言
不言original
2018-06-07 11:20:381762parcourir

Cet article présente principalement la différence entre le constructeur _construct() et _initialize() de la classe dans ThinkPHP. L'introduction est très détaillée, je pense qu'elle a une certaine valeur de référence pour tous les amis qui en ont besoin peuvent le lire ensemble. Jetez un oeil.

Avant-propos

Je crois que les phpers qui connaissent THINKPHP connaissent fondamentalement cette méthode _initialize()Nous utilisons rarement cette méthode. _construct() , à moins que vous n'écriviez vous-même un plug-in, il est rarement utilisé.

En regardant le code aujourd'hui, j'ai soudainement vu _construct() la méthode de construction fournie avec PHP. Ma première impression était qu'elle était relativement peu familière. Bien que je l'ai souvent rencontré lors de l'apprentissage de Java auparavant, je l'ai pratiquement oublié. après un long moment. Mon habitude habituelle est d'écrire les points clés des connaissances

dans mon petit cahier, mais je n'ai pas écrit depuis longtemps, et le style d'écriture élégant et intelligent que j'avais au lycée a complètement disparu dans une autre dimension. En plus des réflexions précédentes, j'ai appris à rédiger des blogs auprès d'experts en technologie. Il ne s'agit pas de me vanter, mais simplement d'éviter que tous les résultats de mon travail ne se dissipent avec le temps. Jetons un coup d’œil à l’introduction détaillée ci-dessous.

Collez d'abord le code (mon environnement est wamp, utilisant le framework TP) :

Fichier FatherAction.class créé.

<?php


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

?>

a créé le fichier SonAction.class.php

<?php


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

}
}

?>

Exécutez index() dans la sous-classe SonAction pour voir le résultat :

son

Si vous modifiez la sous-classe à :

<?php


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

  }
}

?>

Le résultat en cours d'exécution est :

fatherson

Les résultats ci-dessus peuvent être conclus :

ne fonctionne pas lors de l'exécution du constructeur de la sous-classe Appeler automatiquement le constructeur du parent class Si vous souhaitez l'appeler, ajoutez parent::__construct()

Lorsque nous changeons la méthode de construction ci-dessus en méthode THINKPHP_initialize(), nous constaterons que le résultat est cohérent avec la précédente. souhaitez exécuter la méthode _initialize() de la classe parent, vous devez également utiliser cette phrase : parent::_initialize()

Cela signifie-t-il que le constructeur __construct() fourni avec PHP est le même que le _initialize() méthode de THINKPHP ?

Collez d'abord deux morceaux de code :

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

  }

}

?>

Lorsque la méthode d'indexation de la sous-classe SonAction est exécutée, on constate que le résultat de sortie est : père

C'est-à-dire que la sous-classe appelle le constructeur de la classe parent sans appeler le méthode_initialize()

Collez deux autres morceaux de code :

<?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;;
  }
}

?>

Exécutez la méthode d'indexation de la sous-classe SonAction et constatez que le résultat d'entrée est hellofather

De là, nous pouvons tirer la conclusion :

Lorsque lorsque la classe parent de THINKPHP a un constructeur mais pas la sous-classe, THINKPHP n'exécutera pas le

de la sous-classe; Lorsque la classe parent et les sous-classes de THINKPHP ont des constructeurs, le le constructeur de la classe parent doit être appelé Les fonctions doivent utiliser _initialize() -----------------

de la même manière

parent::__construct() Lorsqu'une sous-classe de THINKPHP ; a à la fois un constructeur _initialize() et une méthode

, seul le constructeur

de la sous-classe sera exécuté (j'ai personnellement testé cela, et le code ci-dessus ne le fait pas). __construct_initialize()Recommandations associées : __construct


ThinkPHP utilise la classe de téléchargement UploadFile


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn