Maison > cadre php > PensezPHP > le corps du texte

Analyse de la méthode d'initialisation _initialize() de ThinkPHP5

藏色散人
Libérer: 2021-03-18 08:54:21
avant
5075 Les gens l'ont consulté

Ce qui suit est une introduction à la méthode d'initialisation _initialize() de ThinkPHP5 de la colonne du didacticiel thinkphp. J'espère que cela sera utile aux amis dans le besoin !

Analyse de la méthode d'initialisation _initialize() de ThinkPHP5

Explication détaillée de la méthode d'initialisation _initialize() de ThinkPHP5

Avant-propos

_initialize() Cette méthode dit ceci dans le manuel officiel :

Si votre classe de contrôleur hérite de la classe thinkController, vous pouvez définir la méthode d'initialisation du contrôleur _initialize, qui est exécutée en premier avant que la méthode du contrôleur ne soit appelée.

En fait, il y en a plus de 5, il est également apparu dans les versions précédentes. Laissez-moi vous parler de son processus de mise en œuvre.

Exemple

Ce qui suit est un exemple donné dans le manuel officiel :

namespace app\index\controller;

use think\Controller;

class Index extends Controller
{

    public function _initialize()
    {
        echo 'init<br/>';
    }

    public function hello()
    {
        return 'hello';
    }

    public function data()
    {
        return 'data';
    }
}
Copier après la connexion

Si vous accédez à

http://localhost/index.php/index/Index/hello
Copier après la connexion

, vous obtiendrez

init
hello
Copier après la connexion

Si l'accès à

http://localhost/index.php/index/Index/data
Copier après la connexion

produira une

init
data
Copier après la connexion

analyse

car l'utilisation doit hériter de la classe thinkController, en plus c'est une initialisation, nous avons donc d'abord pensé à la classe thinkController __construct(), regardons le code :

/**
     * 架构函数
     * @param Request    $request     Request对象
     * @access public
     */
    public function __construct(Request $request = null)
    {
        if (is_null($request)) {
            $request = Request::instance();
        }
        $this->view    = View::instance(Config::get('template'), Config::get('view_replace_str'));
        $this->request = $request;

        // 控制器初始化
        if (method_exists($this, '_initialize')) {
            $this->_initialize();
        }

        // 前置操作方法
        if ($this->beforeActionList) {
            foreach ($this->beforeActionList as $method => $options) {
                is_numeric($method) ?
                $this->beforeAction($options) :
                $this->beforeAction($method, $options);
            }
        }
    }
Copier après la connexion

Si vous faites attention, vous avez dû remarquer que dans tout le constructeur, il y a un commentaire sur l'initialisation du contrôleur, et le code suivant est la clé pour réaliser cette initialisation :

// 控制器初始化
if (method_exists($this, '_initialize')) {
    $this->_initialize();
}
Copier après la connexion

La vérité est-elle apparue ? !

En fait, lorsqu'une classe enfant hérite de la classe parent, elle héritera naturellement du constructeur de la classe parent sans remplacer le constructeur. En conséquence, il sera jugé s'il existe une méthode _initialize dans la classe actuelle. , exécutez-le s'il y en a. C'est ce qu'on appelle le principe de 控制器初始化.

Extension

Si la sous-classe hérite de la classe parent et réécrit la méthode constructeur, veillez à appeler le __construct() de la classe parent, sinon elle ne sera pas utilisée. Le code est le suivant :

public function __construct()
{
    parent::__construct();
    ...其他代码...
}
Copier après la connexion

Résumé

Un petit design simple, voici une brève analyse, j'espère qu'elle sera utile à tout le monde.

Lien

Page de manuel associée : http://www.kancloud.cn/manual/thinkphp5/118049

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:segmentfault.com
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