如何在没有在PHP中定义类名的情况下正确继承`factory`方法?

时间:2010-07-15 03:28:40

标签: php oop

我的应用程序中有一个抽象基类。

我想提供一个factory()方法,让我可以使用静态方法轻松制作新模型。

 public static function factory() {
     $class = __CLASS__;    
     return new $class;
 }

这显然不起作用,因为它试图启动抽象类。

我想知道的是,如何让继承此方法的类自己而不是基类?

我是否必须将模型名称传递给工厂方法?

PHP版本 5.2.13 但我也有兴趣了解我将在> = PHP 5.3中使用的内容。

2 个答案:

答案 0 :(得分:1)

在PHP5.3中,你有“后期静态绑定”,并且使用它,函数get_called_class():

$class = get_called_class();
return new $class;

编辑:考虑到这是PHP5.2,没有简单的方法可以在不侵入调试回溯或使用反射的情况下完成它。问题是“自我”不会低估。

答案 1 :(得分:1)

我是否必须将模型名称传递给工厂方法? - 在5.3之前。

这是一种反模式;通常,您只需将方法定义为抽象,然后在每个类上实现。

我可以解释的最简单的方法是,静态方法定义了不是实例或上下文感知的常用功能,因此通过依赖于上下文/实例数据,你做了一些有点错误 - 认为它与写入相同静态方法中的if($this->property)