首页 > 解决方案 > 如何在 PHP 7.2 中编写它?

问题描述

我有这段代码:

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):注意:第 217 行 /public_html/lib/KiTT/Payment/Widget.php 中的数组到字符串转换

那是“variableInterpolation”检查失败的同一行。那么我将如何重写这段代码以使其在 PHP 7.2 中工作?

谢谢!

解决方案:

$value['custom'] = $this->$value['custom']();

必须看起来像这样:

$value['custom'] = $this->{$value['custom']}(); 

标签: phpphp-7.2

解决方案


这是一个顺序变量的问题。

class x {
  public function y() {
    echo 'ok';
  }
}
$x = new x();
$y = array('i' => 'y');

然后

$x->$y['i']();

失败是因为 PHP 首先尝试将$y变量转换为字符串,并获取$x(顺便说一句不存在的)的匹配属性,然后尝试获取索引'i'或不存在的属性,然后尝试将其作为可调用对象运行。

因此有3个错误:

数组到字符串的转换

未定义的属性 x::$Array

函数名必须是字符串(nda:未定义的属性返回 NULL)

相反,花括号变量设置解析顺序:

$x->$y['i']();

将工作。所以使用$this->{$value['custom']}()


推荐阅读