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

不言
Libérer: 2023-03-30 11:58:02
original
1694 Les gens l'ont consulté

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

?>
Copier après la connexion
Copier après la connexion

a créé le fichier SonAction.class.php

<?php


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

}
}

?>
Copier après la connexion

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

son
Copier après la connexion

Si vous modifiez la sous-classe à :

<?php


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

  }
}

?>
Copier après la connexion

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

fatherson
Copier après la connexion

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

?>
Copier après la connexion
Copier après la connexion

<?php


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


  function index(){

  }

}

?>
Copier après la connexion

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 <🎜 de la sous-classe >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;;
  }
}

?>
Copier après la connexion

<?php


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

  }

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

?>
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal