我正在编写一个工厂类,它应该能够返回多种不同类型的单例实例,具体取决于给定的参数。该方法看起来像这样,但我引用单例的静态方法的方式显然是错误的:
public function getService($singletonClassName) {
return $singletonClassName::getInstance();
}
这样的引用的正确语法在PHP中会是什么样的?
答案 0 :(得分:1)
你不能在PHP<中使用那种语法。 5.3:这是PHP 5.3的新功能之一
使用PHP 5.2的几种可能性是:
call_user_func
在第一种情况下,它将如下:
ClassName::getInstance()
而且,在第二种情况下,你会使用类似的东西:
call_user_func($singletonClassName .'::getInstance');
根据call_user_func
的文档,这应该适用于PHP> = 5.2.3
或者您可以使用:
call_user_func(array($singletonClassName, 'getInstance'));
答案 1 :(得分:0)
您只需使用班级名称
public function getService($singletonClassName) {
return SingletonClassName::getInstance();
}
或者,如果$singleClassName
是包含classname的变量,则使用
public function getService($singletonClassName) {
return call_user_func( array($singletonClassName, 'getInstance') );
}
从5.2.3开始,您也可以
call_user_func($singletonClassName .'::getInstance'); // As of 5.2.3