[Codeigniter-users] コントローラーのコンストラクタについて

Back to archive index

Kenichi Ando(Neo,Inc) ando****@neo-n*****
2007年 12月 5日 (水) 22:14:21 JST


bossatamaです。

再度コンストラクタについて。
実は大きなことのわりには、マニュアルでの扱いは、
http://userguide.cilab.info/general/controllers.html#constructors
かなり下にその説明が方に書かれています。

ところが、本家のブログを作るチュートリアルでもコンストラクタ
を使っています。
http://codeigniter.biz/archives/22

初心者はコンストラクタなど使用しないでもサクサクCIが使えて
しまう上に、最初の理解の障壁となるかもしれません。

また、PHP4ではコンストラクタの書き方が異なってしまうのも
面倒でしょうか。

PHP5では以下の両方で動作します。

	function __construct()
	{
		parent::Controller();
	}

	function Blog()
	{
		parent::Controller();
	}

で、一体何が言いたいのかというと、下記に戻ってしまいます。
CakePHPでは、__construct()にコンストラクタを統一し、PHP4でも
擬似的に動作するようです。


> 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();をしないケースは親を無視します。
> このケースはどういった使い方があるのか?と思います。

//bossatama




Codeigniter-users メーリングリストの案内
Back to archive index