PHP:使用动态类名称调用类的静态方法,前提是PHP 5.3

Tod*_*odd 1 php legacy static-methods dynamic-class

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

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

$class = isset($some_condition) && $some_condition ? 'NewClassName' : 'LegacyClassName';
Run Code Online (Sandbox Code Playgroud)

...然后调用函数:

$class::myStaticFunction();
Run Code Online (Sandbox Code Playgroud)

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

例如,

$stuff = call_user_func($class . '::myStaticFunction()'); 
Run Code Online (Sandbox Code Playgroud)

......工作得很好.

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

Vin*_*aux 5

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

5.2中没有别的办法.

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

$stuff = call_user_func_array(array($class, $method), array($arg1, $arg2));
Run Code Online (Sandbox Code Playgroud)