ThinkPHPの_construct()と_initialize()

2243 ワード

ThinkPHPの_initialize()とクラスのコンストラクション関数_construct()
ネット上にはたくさんの情報があります.Initialize()の言い方や使い方は、どうも違和感があるので、自分でテストしてみました.結果を皆さんと共有します.いいえ、訂正してください.
まず、私が言いたいのは
1、__initialize()はphpクラスの関数ではなく、phpクラスの構造関数は__のみです.construct().
2、クラスの初期化:サブクラスに独自のコンストラクション関数(_construct())がある場合は独自の初期化を呼び出し、ない場合は親クラスのコンストラクション関数を呼び出して独自の初期化を行う.
3、子も親もいます_construct()関数の場合、子クラスを初期化するときに親クラスの__を同時に呼び出す場合constrcut()は、サブクラスでparent:_を使用できます.construct().
2つのクラスを書くと、次のようになります.
    class Action{
        public function __construct()
        {
            echo 'hello Action';
        }
    }
    class IndexAction extends Action{
        public function __construct()
        {
            echo 'hello IndexAction';
        }
    }
    $test = new IndexAction;
    //output --- hello IndexAction

サブクラスIndexActionを初期化するときに自分のコンストラクタが呼び出されるのは明らかなので、出力は「hello IndexAction」です.
ただし、サブクラスを
    class IndexAction extends Action{
        public function __initialize()
        {
            echo 'hello IndexAction';
        }
    }

では出力は「hello Action」です.サブクラスIndexActionには独自のコンストラクタがないからです.
子クラスを初期化するときに、親クラスのコンストラクタを同時に呼び出したい場合は?
    class IndexAction extends Action{
        public function __construct()
        {
            parent::__construct();
            echo 'hello IndexAction';
        }
    }

これにより、2つの文を同時に出力することができます.
もちろん、親クラスで子クラスを呼び出す方法もあります.
    class Action{
        public function __construct()
        {
            if(method_exists($this,'hello'))
            {
                $this -> hello();
            }
            echo 'hello Action';
        }
    }
    class IndexAction extends Action{
        public function hello()
        {
            echo 'hello IndexAction';
        }
    }

これにより、2つの文を同時に出力することもできます.
そして、ここではサブクラスのメソッドhello()はThinkPHPの__に似ているinitialize().
だから、ThinkPHPの中の_initialize()の登場は、プログラマーがサブクラスを書くときにparent:_を頻繁に使用しないようにするのに便利です.construct()は、フレーム内の親のコンストラクタを正しく呼び出すので、ThnikPHPで子クラスを初期化するときに__を使います.initialize()を使用せずにconstruct()は、もちろんフレームワークを修正することで_initialize()関数は、あなたの好きな関数名に変更されます. 
ダウンロード例:test.rar