PHP 7和PHP5的变量函数兼容性问题

3

我遇到了这样一个情况:在PHP5中可以运行,但在PHP7中会致命错误:

/* load batch processing data into variable */
$args = get_option('leads_batch_processing');
/* process batches */
self::$args['method']($args);

这段代码在 PHP7 中能够正常工作,但会导致 PHP5 崩溃:

/* load batch processing data into variable */
$args = get_option('leads_batch_processing');
/* process batches */
 self::{$args['method']}($args);

如何在PHP的两个环境中成功使用变量函数?我尝试使用基于PHP版本的if条件语句,但是PHP7版本的语法会导致PHP5语法错误,所以我不能走这条路。

我该怎么办?


call_user_func()? - Mark Baker
你能否将其作为答案提出来?在上述情况中,$args不是私有或静态变量。但在$args ['method']内部,存在一个函数名称,该函数名称存在于调用类(self::)中。 - atwellpub
第二段代码应该在PHP 5和PHP 7上都能正常工作。确保你不是在一些过时的PHP版本(如5.3)上进行测试。 - NikiC
作为WordPress插件开发人员,我无法承受那种情况。我将查看PHP版本从5.3到7。第二个版本在低版本的PHP上会致命错误。它不喜欢括号。 - atwellpub
1个回答

2

将其分配给一个常规变量,这不会导致语法错误:

$method = $args['method'];
$this->$method($args);

或者,类似于评论中建议的那样,使用call_user_func()

call_user_func(
    array($this, $args['method']),
    $args
);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接