ホームページ  >  記事  >  PHPフレームワーク  >  ThinkPHP5 の _initialize() 初期化メソッドの分析

ThinkPHP5 の _initialize() 初期化メソッドの分析

藏色散人
藏色散人転載
2021-03-17 17:35:315049ブラウズ

次のチュートリアル コラムでは、ThinkPHP5 の _initialize() 初期化メソッドを紹介します。

#ThinkPHP5 の _initialize() 初期化メソッドの詳細説明

ThinkPHP5 の _initialize() 初期化メソッドの分析

まえがき

_initialize ()
このメソッドは公式マニュアルに記載されています:

コントローラー クラスが \think\Controller クラスを継承している場合、コントローラー内でコントローラー初期化メソッド _initialize を定義できます。メソッドが呼び出されます。

実際には 5 つ以上あり、以前のバージョンにも登場していましたが、その実装プロセスについてお話しましょう。

公式マニュアルに記載されている例は以下のとおりです。

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';
    }
}

http://localhost/index.php/index/Index/hello

にアクセスすると、

init
hello
#が出力されます。 ##アクセスすると
http://localhost/index.php/index/Index/data

が出力されます

init
data

Analysis

使用は

\think\Controller

クラスを継承する必要があり、さらにこれは初期化であるためですそこで、最初に

\think\Controller

クラスの

__construct()

を考えました。コードを見てみましょう: <pre class="brush:php;toolbar:false">/**      * 架构函数      * @param Request    $request     Request对象      * @access public      */     public function __construct(Request $request = null)     {         if (is_null($request)) {             $request = Request::instance();         }         $this-&gt;view    = View::instance(Config::get('template'), Config::get('view_replace_str'));         $this-&gt;request = $request;         // 控制器初始化         if (method_exists($this, '_initialize')) {             $this-&gt;_initialize();         }         // 前置操作方法         if ($this-&gt;beforeActionList) {             foreach ($this-&gt;beforeActionList as $method =&gt; $options) {                 is_numeric($method) ?                 $this-&gt;beforeAction($options) :                 $this-&gt;beforeAction($method, $options);             }         }     }</pre> 注意してください。コンストラクター全体に、コントローラーの初期化に関するコメントがあり、次のコードがこの初期化を達成するための鍵であることに気づいたはずです: <pre class="brush:php;toolbar:false">// 控制器初始化 if (method_exists($this, '_initialize')) {     $this-&gt;_initialize(); }</pre> 真実は明らかになりましたか? ! 実際には、子クラスが親クラスを継承する場合、コンストラクタをオーバーライドすることなく、自然に親クラスのコンストラクタを継承することになり、それに応じて現在のクラスに

_initializeがあるかどうかが判断されます。 ## メソッドは利用可能な場合に実行されます。これは、いわゆる

コントローラー初期化

原則です。

Extension

サブクラスが親クラスを継承し、コンストラクター メソッドを書き換える場合は、親クラスの __construct() を呼び出すことに注意してください。そうしないと、このメソッドは使用されません。コードは次のとおりです。

public function __construct()
{
    parent::__construct();
    ...其他代码...
}
概要

シンプルな小さな設計です。ここでは簡単な分析を示します。皆さんのお役に立てれば幸いです。

リンク

関連マニュアルページ:

http://www.kancloud.cn/manual/thinkphp5/118049

以上がThinkPHP5 の _initialize() 初期化メソッドの分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。