Kenichi Ando(Neo,Inc)
ando****@neo-n*****
2007年 11月 26日 (月) 23:39:54 JST
bossatamaです。 コントローラーのコンストラクタについて考えを標準化しようと 思います。 通常は <?php class Blog extends Controller { function index() { echo 'Hello World!'; } } ?> のindexで動きます。 URIは、 www.hoge.com/index.php/blog/ または、www.hoge.com/index.php/blog/index となります。 コンストラクタを使うと、 <?php class Blog extends Controller { function Blog() { parent::Controller(); } function index() { echo 'Hello World!'; } } ?> コンストラクタ(今回はPHP4で)は、 オブジェクトの生成時に自動的にコールされる特殊なメンバ関数。 CIマニュアルでは、ローカルなコンストラクタは、親コントローラクラスの コンストラクタを上書きしてしまうので、手動で親コントローラクラスの コンストラクタを呼び出す必要がある。(parent::Controller();) とあります。また、 コンストラクタはインスタンス化されるときに、初期値をセットする必要が ある場合や既定の処理を実行する場合に便利です。コンストラクタは値を返す ことができませんが、既定の処理を実行することができます。 とあります。 bossatama的見解では、ローカルコンストラクタでは、parent::Controller(); は宣言するのもはもちろん、ヘルパー関数やDBのロード宣言をここで行う。 index()だけでは済まない大きめのプログラムを作る場合、特に、同じファイル 内で、共通して使用するものがある場合は、ローカルコンストラクタを必ず定義 した方がいいと思います。 ローカルContorllerクラスの親クラスは、libraries/Controller.phpにいます。 コントローラークラスはCI_Baseの子クラスです。 CI_Baseはcodeigniter/Base4.php(for PHP4)にいます。 CI_Baseは、CI_Loaderの子クラスです。 CI_Loaderはlibraries/Loader.phpにいます。 オーバーライドしまくりです。 ローカルなコンストラクタは親をオーバーライドするので、 parent::Controller();をしないケースは親を無視します。 このケースはどういった使い方があるのか?と思います。 ========================================= CodeIgniter Users Group in Japan bossatama http://codeigniter.jp/ =========================================