2010-03-07 67 views
0

我正在寫一個工廠類,它應該能夠返回多個不同類型的單例實例,具體取決於給定的參數。該方法會是這個樣子,但我引用單身的靜態方法的方式顯然是錯誤的:如何在PHP中引用變量類的靜態方法?

public function getService($singletonClassName) { 
    return $singletonClassName::getInstance(); 
} 

會是什麼的正確語法這種提法的樣子在PHP?

回答

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

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

+0

當我開始書面方式我的答案,你並不像完整的,因爲它現在是^^ *(現在只有第一部O如果答案是這樣的,那麼這個班級的名字就是硬編碼的) - 我們兩次編輯了幾次^^ * – 2010-03-07 21:34:05

+0

其實,我從你身上學到了射擊早,然後添加東西的技巧。注意你做了幾次,發現它非常狡猾:) – Gordon 2010-03-07 21:34:46

0

你只需要使用類名

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