ThinkPHP ソース コードから _initialize と __construct を説明する コンストラクト 2 チュートリアル コンストラクト 2 クラック 中国語版は初期化に失敗しました

WBOY
リリース: 2016-07-29 08:54:28
オリジナル
1688 人が閲覧しました

最近ThinkPHPフレームワークを勉強していて、_initialize()関数を見かけたので簡単にまとめてみました

GoogleとBaiduのチュートリアルをざっと見たのですが、かなり話がまとまっていると感じました、それらはすべてテストされていましたが、要点までは到達できませんでした ~

実験版: ThinkPHP 3.2.3、PHP5.6。

_initialize() 関数は、親クラスとサブクラスのコンストラクターをサブクラスで同時に呼び出すことができるようにするために登場します。

それを理解する最も簡単な方法は、最も信頼できる TP のソース コードを開くことです。

パス: ThinkPHP3.2.3/ThinkPHP/Library/Think/Controller.class.php (△Controllerは抽象クラス△)

ここで、抽象クラスControllerが__construct()メソッドに書き換えられていることがわかります。 3 つの赤い線に注目してください。ここには _initialize() がすべてあります。実際、 _initialize() メソッドの特別な宣言はなく、それに特別な関数を与えます。
ThinkPHP ソース コードから _initialize と __construct を説明する コンストラクト 2 チュートリアル コンストラクト 2 クラック 中国語版は初期化に失敗しました _initialize() がコンストラクターの機能を持っていることがわかります。これは単に __construct() 内にあるためです (クラスがインスタンス化されると、コンストラクター __construct が実行されます。現在のクラスに _initialize() メソッドがある場合、ちなみに_initialize())を実行しました

ネイティブPHPでサブクラスと親クラスのコンストラクターを同時に呼び出すという要件を完了する方法を見てみましょう。

それでは、ThinkPHP ではどうなるでしょうか?
ThinkPHP ソース コードから _initialize と __construct を説明する コンストラクト 2 チュートリアル コンストラクト 2 クラック 中国語版は初期化に失敗しました

ネイティブ コードが要件を満たしたい場合は、サブクラスでparent::__construct()を呼び出して実行する必要があります。
ThinkPHP ソース コードから _initialize と __construct を説明する コンストラクト 2 チュートリアル コンストラクト 2 クラック 中国語版は初期化に失敗しました ThinkPHP では、親クラスが特別に処理された後で _initialize() 自体がこの関数を完了できます。実際、ThinkPHP の _initialize 関数は、親クラスと子クラスのコンストラクターを同時に呼び出す必要がある場合に使用することを目的としていると思います。時間。 。

TPで_initialize()と__construct()を使用する際の注意点をまとめると

_initialize()と__construct()が同時に現れた場合、このとき__construct()なので_initialize()は無効になります。は書き直され、_initialize() を呼び出さなくなりました。

  • 親クラスと子クラスのコンストラクターを同時に呼び出す必要がある場合は、親クラスの __construct() で処理する必要があります:

    <code>if(method_exists($this,’_initialize’)){
    
    $this -> _initialize();
    
    }
    </code>
    ログイン後にコピー
  • 両方とも、そうしないと、親クラスと子クラスの関数が同時に呼び出されることになります

  • 今のところ (ThinkPHP3.2.3)、結局のところ、_initialize() はまだ行う必要があります。この場合、 _initialize() の役割は名前付け制約だけです。必要に応じて、公式がこの機能を改善すると思います。

  • 以上、ThinkPHP のソースコードから _initialize と __construct の内容を含めて説明しましたが、PHP チュートリアルに興味のある友人の参考になれば幸いです。

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