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

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

藏色散人
リリース: 2021-03-18 08:54:21
転載
5095 人が閲覧しました

次のチュートリアル コラムでは、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()

を考えました。コードを見てみましょう: <div class="code" style="position:relative; padding:0px; margin:0px;"><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><div class="contentsignin">ログイン後にコピー</div></div> 注意してください。コンストラクター全体に、コントローラーの初期化に関するコメントがあり、次のコードがこの初期化を達成するための鍵であることに気づいたはずです: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">// 控制器初始化 if (method_exists($this, '_initialize')) {     $this-&gt;_initialize(); }</pre><div class="contentsignin">ログイン後にコピー</div></div> 真実は明らかになりましたか? ! 実際には、子クラスが親クラスを継承する場合、コンストラクタをオーバーライドすることなく、自然に親クラスのコンストラクタを継承することになり、それに応じて現在のクラスに

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

コントローラー初期化

原則です。

Extension

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

public function __construct()
{
    parent::__construct();
    ...其他代码...
}
ログイン後にコピー
概要

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

リンク

関連マニュアルページ:

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

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

関連ラベル:
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート