【发布时间】:2014-07-01 21:49:52
【问题描述】:
我正在使用 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()?也许我的语法遗漏了一些东西,等等。
【问题讨论】:
-
您可以升级您的 PHP 版本。从 5.3 开始,您可以使用它们来调用您的函数。 5.2没有别的办法
-
我害怕的答案!虽然这就是我喜欢做的事情,但不幸的是,目前这不是一个选择。请随意回答这些 cmets,我可以接受。
标签: php static-methods legacy dynamic-class