PHP:Call Class'动态类名称为PHP 5.3的静态方法

时间:2014-07-01 21:49:53

标签: php static-methods legacy dynamic-class

我正在使用php 5.2.6开发遗留代码库的项目。该项目的一部分涉及类似于使用一个PHP类与另一个PHP类的A / B测试。这两个类具有许多相同的函数名,具有非常相似的签名,但方法中的方法不同。我想知道是否可以使用基于动态/变量的类名称在类中调用静态方法。

例如,id喜欢将类名设置为:

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

...然后调用函数:

$class::myStaticFunction();

我知道这可以通过call_user_func()完成,但我很难找到替代方法(如果有的话)。我只是宁愿不用正则表达式用call_user_func()语句替换对遗留类的所有调用。

如,

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

......做得很好。

有没有人知道是否有一种更简单的表达方式:使用PHP 5.2的$ dynamicClassName :: staticFunction()?也许我错过了我的语法等等。

1 个答案:

答案 0 :(得分:5)

您可以升级您的PHP版本。从5.3开始,您就可以使用它们来调用您的函数。

5.2中没有别的办法。

你可以使用这篇文章,也许更容易阅读:

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