如何在PHP中引用变量类的静态方法?
问题描述:
我正在写一个工厂类,它应该能够返回多个不同类型的单例实例,具体取决于给定的参数。该方法会是这个样子,但我引用单身的静态方法的方式显然是错误的:如何在PHP中引用变量类的静态方法?
public function getService($singletonClassName) {
return $singletonClassName::getInstance();
}
会是什么的正确语法这种提法的样子在PHP?
答
变量
你不能在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'));
答
你只需要使用类名
public function getService($singletonClassName) {
return SingletonClassName::getInstance();
}
另外,如果$singleClassName
是含有类名使用
public function getService($singletonClassName) {
return call_user_func(array($singletonClassName, 'getInstance'));
}
随着5.2.3你也可以做
call_user_func($singletonClassName .'::getInstance'); // As of 5.2.3
*咳嗽*五*咳嗽*分钟:) – Gordon 2010-03-07 21:33:17
当我开始书面方式我的答案,你并不像完整的,因为它现在是^^ *(现在只有第一部O如果答案是这样的,那么这个班级的名字就是硬编码的) - 我们两次编辑了几次^^ * – 2010-03-07 21:34:05
其实,我从你身上学到了射击早,然后添加东西的技巧。注意你做了几次,发现它非常狡猾:) – Gordon 2010-03-07 21:34:46