Maison > Article > développement back-end > Explication de la différence entre la fonction _initialize() et la fonction __construct() en PHP
Le contenu de cet article porte sur la différence entre la fonction _initialize() et la fonction __construct() en PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. aide.
La méthode _initialize() doit être exécutée avant qu'une méthode ne soit exécutée, y compris bien sûr Constructeur __construct. C'est-à-dire que s'il existe une fonction _initialize(), l'appel de n'importe quelle méthode de l'objet entraînera l'appel automatique de la fonction _initialize(), et le constructeur __construct() n'est appelé qu'une seule fois lors de la création de l'objet, et a rien à voir avec d'autres appels de méthode.
__construct ici est un double tiret et la fonction _initialize() est un simple tiret
Si les classes parent et enfant ont la fonction _initialize(), la classe enfant remplace celle de la classe parent , si Si la sous-classe ne l'a pas mais que la classe parent l'a, la sous-classe en hérite de la classe parent.
Par défaut, le constructeur de la sous-classe n'appellera pas automatiquement le constructeur de la classe parent. Lors de l'appel de _initialize() d'un objet de sous-classe, il n'appellera pas automatiquement le _initialize() de la classe parent
Lors de l'écriture du constructeur de la sous-classe, vous devez généralement ajouter activement le constructeur de la classe parent appelez parent::__construct(), sinon cela provoquera une exception de pointeur nul de l'objet de sous-classe, comme l'appel à une fonction membre assign() sur un non-objet.
Ainsi, dans certaines fonctions de gestion en arrière-plan du système ou de commentaires, le contrôleur concerné peut être étendu au contrôleur de base :
Base.php :
<?php namespace app\admin\controller; use think\Controller; class Base extends Controller { public function _initialize(){ if(!session('username')){ $this->error('请先登录系统!','Login/index'); } } }
Article php.
<?php namespace app\Admin\controller; use app\Admin\model\Article as ArticleModel; use app\admin\controller\Base; class Article extends Base { ……… ……… }
De cette façon, avant qu'une méthode du contrôleur Article ne soit exécutée, la méthode _initialize() dans Base.php sera exécutée en premier pour détecter si vous êtes connecté, sans créer d'objet.
Recommandations associées :
La différence entre la fonction explosive() et la fonction strtok() en php
method_exists( en php) et analyse de la fonction is_callable()
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!