2014-10-16 30 views
0

這是一個語法問題,我想......我有類名的數組,我在一家工廠用來生成按對象類型代碼對象:PHP調用類的靜態方法的類名

$array = ['a' => '\namespace\AClass', 'b' => '\namespace\BClass']; 

我可以從字符串名稱將這些類別實例就好:

$classname = $array['a']; 
return new $classname($arg1, $arg2); 

我所試圖做的是調用數組或字符串中指定的類的靜態方法,而無需初始化對象 - 這是如:

$classname = $array['a']; 
return $classname::formatArg($arg1); 

顯然,這是行不通的,因爲$ classname是一個字符串,所以我該如何告訴PHP我試圖訪問該名稱的對象?

+3

你確定這不工作?如果是這樣,你可以使用call_user_func。它適用於類方法,無論是實例還是靜態。 – ToBe 2014-10-16 15:03:52

+1

你有什麼錯誤?我運行了這個簡單的版本,它的工作原理。 'class AClass {static} formatArg($ arg1){echo $ arg1; } } $ array = array('a'=>'\ AClass','b'=>'\ namespace \ BClass'); $ arg1 ='hello'; $ classname = $ array ['a']; var_dump($ classname); $ classname :: formatArg($ arg1);' – slapyo 2014-10-16 15:09:11

+1

它會工作.... – hek2mgl 2014-10-16 15:11:32

回答