[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 メーリングリストの案内