[PHP-users 19390]Re: PHP版「社長命令・起立!」/オブジェクトが自分のクラスを認識していない?

Osamu Shigematsu m5issige @ mr.hitachi-medical.co.jp
2003年 12月 17日 (水) 15:26:47 JST


重松です。こんにちは。

ぱっと見たんですが、

class ShainFactory_class {

	function ShainFactory_class() {
	}

	function factory($p_yakushoku) {
	
		$shain = NULL;
	
		switch ($p_yakushoku) {
			case "tanto" : 
				$shain = new Tanto_class();
				break;
			case "shunin" : 
				$shain = new Shunin_class();
				break;
			case "bucho" :
				$shain = new Bucho_class();
			}

		return $shain;
	}
}

とありますので、

	$shain = new ShainFactory_class();

で返されるのは、ShainFactory_classs そのものです。

		$shain->set_kihonkyu($kihonkyu);	//※ここでエラー

で、ShainFactory_class には、set_kihonkyu() は定義されないのだから、
当然エラーになるでしょう。

	$shain = ShainFactory_class::factory($_GET['param']);

とすればよいでしょう。

通常、factory method は static とか class method とか、PHP での
正式な呼称は知らないんですが、instantiate しなくても呼びさせる
関数として作るのが普通ですよね?
で、こういうのは、class side factory pattern というそうです。

同様の実装は、PEAR の DB パッケージなどで利用されいます。
参考にされてみてはいかがでしょうか?

あと、注文をつけるとすると、一式ダウンロードできると、
もっと便利かなと思いました。
# あと、CLI 版も欲しいかも。

-- 
Osamu Shigematsu <m5issige @ mr.hitachi-medical.co.jp>



PHP-users メーリングリストの案内