我正在寫一個工廠類,它應該能夠返回多個不同類型的單例實例,具體取決於給定的參數。該方法會是這個樣子,但我引用單身的靜態方法的方式顯然是錯誤的:如何在PHP中引用變量類的靜態方法?
public function getService($singletonClassName) {
return $singletonClassName::getInstance();
}
會是什麼的正確語法這種提法的樣子在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