Cet article analyse __initialize() et le constructeur de classe __construct() dans ThinkPHP à travers des exemples. Partagez-le avec tout le monde pour votre référence. L'analyse spécifique est la suivante :
__construct dans thinkphp ne peut pas être utilisé avec désinvolture, car votre classe de module hérite de la classe supérieure et la classe supérieure est définie
Recommandations d'apprentissage associées : thinkphp
1 __initialize()
n'est pas une fonction dans la classe php Le constructeur de la classe php est seulement __construct()
.
, si vous souhaitez appeler la __constrcut() de la classe parent en même temps lors de l'initialisation de la sous-classe, vous pouvez utiliser .__construct()
parent::__construct()
Si on écrit deux classes, comme suit :
Le code est le suivant :
class Action{ public function __construct() { echo 'hello Action'; } } class IndexAction extends Action{ public function __construct() { echo 'hello IndexAction'; } } $test = new IndexAction; //output --- hello IndexAction
Evidemment, lors de l'initialisation de la sous-classe IndexAction, la sienne Le constructeur sera appelé, donc la sortie est 'hello IndexAction', mais modifiez la sous-classe en :
Le code est le suivant :
class IndexAction extends Action{ public function __initialize() { echo 'hello IndexAction'; } }
Ensuite, la sortie est 'hello Action' , parce que la sous-classe IndexAction n'a pas elle-même de constructeur, que se passe-t-il si je veux appeler le constructeur de la classe parent en même temps lors de l'initialisation de la sous-classe
Le code est le suivant :
class IndexAction extends Action{ public function __construct() { parent::__construct(); echo 'hello IndexAction'; } }
De cette façon, les deux phrases peuvent être combinées en même temps. Sortie, bien sûr, une autre façon est d'appeler la méthode de la sous-classe dans la classe parent
Le code est. comme suit :
class Action{ public function __construct() { if(method_exists($this,'hello')) { $this -> hello(); } echo 'hello Action'; } } class IndexAction extends Action{ public function hello() { echo 'hello IndexAction'; } }
De cette façon, deux phrases peuvent également être affichées en même temps, et ici La méthode hello() dans la classe est similaire à __initialize() dans ThinkPHP.
Par conséquent, l'apparition de
dans ThinkPHP est uniquement destinée à permettre aux programmeurs d'éviter une utilisation fréquente de lors de l'écriture de sous-classes, et en même temps d'appeler correctement le constructeur de la classe parent dans le framework, donc, lors de l'initialisation d'une sous-classe dans ThnikPHP, utilisons __initialize() au lieu de __initialize()
. Bien sûr, vous pouvez également modifier la fonction __initialize() en votre nom de fonction préféré en modifiant le framework parent::__construct()
__construct()
Recommandations associées :
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!