1

我正在使用 php 5.2.6 为遗留代码库开发一个项目。该项目的一部分涉及类似于使用一个 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()?也许我的语法遗漏了一些东西,等等。

4

1 回答 1

5

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

5.2没有别的办法。

你可以使用这个写作,也许更容易阅读:

$stuff = call_user_func_array(array($class, $method), array($arg1, $arg2));
于 2014-07-01T22:09:13.980 回答