如何在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')); 
+0

*咳嗽*五*咳嗽*分钟:) – Gordon 2010-03-07 21:33:17

+0

当我开始书面方式我的答案,你并不像完整的,因为它现在是^^ *(现在只有第一部O如果答案是这样的,那么这个班级的名字就是硬编码的) - 我们两次编辑了几次^^ * – 2010-03-07 21:34:05

+0

其实,我从你身上学到了射击早,然后添加东西的技巧。注意你做了几次,发现它非常狡猾:) – Gordon 2010-03-07 21:34:46

你只需要使用类名

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