Maison >développement back-end >tutoriel php >Pensez à la différence entre le constructeur de classe _construct() et _initialize() en PHP
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 'father'; } } ?>
a créé le fichier SonAction.class.php
<?php class SonAction extends FatherAction{ public function __construct(){ echo 'son'; } 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 'son'; } 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 'father'; } } ?>
<?php class SonAction extends FatherAction{ public function _initialize(){ echo 'son'; } 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 'father'; } } ?>
<?php class SonAction extends FatherAction{ public function _initialize(){ echo 'son'; } function index(){ } function hello(){ echo 'hello'; } } ?>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()
-----------------
parent::__construct()
Lorsqu'une sous-classe de THINKPHP ; a à la fois un constructeur _initialize()
et une méthode
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!