2014-07-01 92 views
1

我正在使用PHP 5.2.6的遺留代碼庫項目工作。這個項目的一部分涉及類似於使用一個PHP類與另一個PHP類的A/B測試。這兩個類具有許多相同的函數名稱,簽名非常相似,但方法中的方法不同。我想知道是否可以使用基於動態/基於變量的類名來調用類中的靜態方法。PHP:調用類靜態方法與動態類名稱前PHP 5.3

例如,ID喜歡設置類的名稱,例如:

$class = isset($some_condition) && $some_condition ? 'NewClassName' : 'LegacyClassName'; 

...然後調用函數的這樣:

$class::myStaticFunction(); 

林意識到,這可以通過call_user_func來完成(),但我無法找到替代方法(如果有的話)。我只是不想用正則表達式用call_user_func()語句替換所有對傳統類的調用。

例如,

$stuff = call_user_func($class . '::myStaticFunction()'); 

...做的工作就好了。

有誰知道是否有更簡單的方式來表達:$ dynamicClassName :: staticFunction()與PHP 5.2?也許我缺少一些與我的語法等

+1

你可以升級你的PHP版本。從5.3開始,您可以使用他們想要調用函數的方式。 5.2 –

+0

沒有別的辦法我擔心的答案!雖然這就是我喜歡做的事情,但不幸的是,目前這不是一種選擇。隨意回答這些評論,我可以接受。 – Todd

回答

5

您可以升級您的PHP版本。從5.3開始,您可以使用他們想要調用函數的方式。

5.2中沒有其他的方法。

您可以使用此寫作,也許更容易閱讀:

$stuff = call_user_func_array(array($class, $method), array($arg1, $arg2));