【发布时间】:2018-10-22 08:56:57
【问题描述】:
我有这段代码:
private function _resolveCustomEntries($fields)
{
foreach ($fields as &$value) {
if (array_key_exists('custom', $value)) {
if (method_exists($this, $value['custom'])) {
$value['custom'] = $this->$value['custom'](); //variableInterpolation
}
}
}
return $fields;
}
我运行了 PHP 7.2 兼容性检查,它在这里抱怨标记行上的“variableInterpolation”。当我运行这段代码时,PHP 日志告诉我:
ERR(3):注意:数组到字符串的转换 /public_html/lib/KiTT/Payment/Widget.php 在第 217 行
那是“variableInterpolation”检查失败的同一行。那么我将如何重写这段代码以使其在 PHP 7.2 中工作?
谢谢!
解决方案:
$value['custom'] = $this->$value['custom']();
必须看起来像这样:
$value['custom'] = $this->{$value['custom']}();
【问题讨论】:
-
应该在 php 7.2 中工作 - 它在 5.X 中对我来说会出错?
-
嗯,该站点在 PHP 7.2 上运行,兼容性扫描仪给了我一个错误。嗯……
-
你有没有 var_dumped $this、$this->value 和 $this->value['custom']?
-
它在 Ajax 请求中,所以我不能 var_dump,可以吗?
-
修复评估的顺序,因为似乎
$value(数组)首先被字符串化:$this->{$value['custom']}()左右应该可以工作,如果语法错误,您可能需要一个中间变量$x = $value['custom']; $this->$x()