Maison  >  Article  >  développement back-end  >  Explication de la différence entre la fonction _initialize() et la fonction __construct() en PHP

Explication de la différence entre la fonction _initialize() et la fonction __construct() en PHP

不言
不言original
2018-08-18 11:35:1815723parcourir

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(&#39;username&#39;)){
            $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!

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