Detaillierte Erläuterung der Initialisierungsmethode _initialize() von ThinkPHP5

高洛峰
Freigeben: 2016-11-16 11:26:15
Original
5551 Leute haben es durchsucht

Vorwort
_initialize() Diese Methode heißt im offiziellen Handbuch:

Wenn Ihre Controller-Klasse die thinkController-Klasse erbt, können Sie die Controller-Initialisierungsmethode _initialize definieren, wobei zuerst vor der Controller-Methode ausgeführt wird heißt.

Tatsächlich gibt es mehr als 5, es ist auch in früheren Versionen erschienen. Lassen Sie mich mit Ihnen über den Implementierungsprozess sprechen.

Beispiel
Das Folgende ist das Beispiel im offiziellen Handbuch:

namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
    public function _initialize()
    {
        echo &#39;init<br/>&#39;;
    }
    public function hello()
    {
        return &#39;hello&#39;;
    }
    public function data()
    {
        return &#39;data&#39;;
    }
}
Nach dem Login kopieren

Wenn Sie
http://localhost/index.php/index/Index/ besuchen Hallo
Wird

 init
 hello
Nach dem Login kopieren

ausgeben. Wenn Sie auf
http://localhost/index.php/index/Index/data
zugreifen, wird

init
data
Nach dem Login kopieren

ausgegeben Analyse
Da die Verwendung die thinkController-Klasse erben muss und dies eine Initialisierung ist, haben wir zuerst an __construct() in der thinkController-Klasse gedacht:

/**
     * 架构函数
     * @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(&#39;template&#39;), Config::get(&#39;view_replace_str&#39;));
        $this->request = $request;
        // 控制器初始化
        if (method_exists($this, &#39;_initialize&#39;)) {
            $this->_initialize();
        }
        // 前置操作方法
        if ($this->beforeActionList) {
            foreach ($this->beforeActionList as $method => $options) {
                is_numeric($method) ?
                $this->beforeAction($options) :
                $this->beforeAction($method, $options);
            }
        }
    }
Nach dem Login kopieren

Wenn Sie Seien Sie vorsichtig, Sie müssen bemerkt haben, dass es im gesamten Konstruktor einen Kommentar zur Controller-Initialisierung gibt, und der folgende Code ist der Schlüssel zum Erreichen dieser Initialisierung:

// 控制器初始化
if (method_exists($this, &#39;_initialize&#39;)) {
    $this->_initialize();
}
Nach dem Login kopieren

Ist die Wahrheit ans Licht gekommen? !

Wenn eine untergeordnete Klasse die übergeordnete Klasse erbt, erbt sie natürlich den Konstruktor der übergeordneten Klasse, ohne den Konstruktor zu überschreiben. Dementsprechend wird beurteilt, ob in der aktuellen Klasse eine _initialize-Methode vorhanden ist ist, es auszuführen. Dies ist das Prinzip der sogenannten Controller-Initialisierung.

Erweiterung
Wenn die Unterklasse die übergeordnete Klasse erbt und die Konstruktormethode neu schreibt, achten Sie darauf, __construct() der übergeordneten Klasse aufzurufen, da sie sonst nicht verwendet wird. Der Code lautet wie folgt:

public function __construct()
{
    parent::__construct();
    ...其他代码...
}
Nach dem Login kopieren

Zusammenfassung
Ein einfaches kleines Design, hier ist eine kurze Analyse, ich hoffe, es wird für alle hilfreich sein.

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage