php - 如何在 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']}();
解决方案
这是一个顺序变量的问题。
和
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']}()
推荐阅读
- angularjs - 无法读取未定义堆栈模板的菜单 pixinvent
- javascript - 切换图标幻灯片到 addcart 按钮 onclick
- typescript - HTML2Canvas 在 Ionic4 角度项目中生成空白图像。控制台没有错误。相同的代码在纯 html/javascript 中生成正确的图像
- javascript - 网络爬虫的异步请求
- highcharts - Highcharts 多个 rowsUrl 在同一个图表中
- c - C程序使用系统调用从文件中读取替代字符,而不是在循环中工作
- javascript - 具有通过匹配函数分隔的文本部分和数字部分的字符串在 8 之后不会将数字部分增加 1
- docker - Windows 10 上的 docker build --memory
- css - 导航栏仅在 Safari 上全高度拉伸
- jquery - 是否可以将文本框值传递给插件