我的应用程序中有一个抽象基类。
我想提供一个factory()
方法,让我可以使用静态方法轻松制作新模型。
public static function factory() {
$class = __CLASS__;
return new $class;
}
这显然不起作用,因为它试图启动抽象类。
我想知道的是,如何让继承此方法的类自己而不是基类?
我是否必须将模型名称传递给工厂方法?
PHP版本 5.2.13 但我也有兴趣了解我将在> = PHP 5.3中使用的内容。
答案 0 :(得分:1)
在PHP5.3中,你有“后期静态绑定”,并且使用它,函数get_called_class():
$class = get_called_class();
return new $class;
编辑:考虑到这是PHP5.2,没有简单的方法可以在不侵入调试回溯或使用反射的情况下完成它。问题是“自我”不会低估。
答案 1 :(得分:1)
我是否必须将模型名称传递给工厂方法? - 在5.3之前。
这是一种反模式;通常,您只需将方法定义为抽象,然后在每个类上实现。
我可以解释的最简单的方法是,静态方法定义了不是实例或上下文感知的常用功能,因此通过依赖于上下文/实例数据,你做了一些有点错误 - 认为它与写入相同静态方法中的if($this->property)
。