问题描述
我们最近已升级到PHP 7.4,并遇到以下代码块的潜在致命错误警报:
$total = 0;
$balance = 0;
if (is_array($company['history']) && ($histCount = count($company['history']))) {
for ($i = $histCount - 1; $i >= 0; $i--) {
$total += $company['history'][$i]['amt_total'];
$balance += $company['history'][$i]['due'];
$company['history'][ $i ]['balance'] = $balance; // EA flags as potential Fatal error
$company['history'][ $i ]['total'] = $total; // EA flags as potential Fatal error
}
}
history
中的每个$company
元素(以及其他)都已初始化amt_total
,due
,balance
和total
,并且最后两个被初始化为0
。
EA标记了指示的两行,并说:“可能会引发PHP致命错误(不能使用字符串偏移量作为数组)。”
感谢任何可以帮助我了解这里问题的人。
其他信息
有人问定义$company
的代码是从哪里来的...
foreach ($this->orderList as $order) {
if ($order['amt_paid'] !== $order['real_amt_paid'] && !empty($order['real_amt_paid'])) {
$order['amt_paid'] = $order['real_amt_paid'];
}
$row = [];
foreach ($this->customerHistoryColumns as $col) {
$order[$col[0]] = ($order[$col[0]] === null ? "" : str_replace("&","&",$order[$col[0]]));
switch ($col[0]) {
...
case "due":
$row['due'] = $order['amt_total'] - $order['amt_paid'];
break;
...
default:
$row[$col[0]] = $order[$col[0]];
break;
}
}
$row['balance'] = 0;
$row['total'] = 0;
$arr['history'][] = $row;
}
return $arr['history'];
公司本身在其他地方定义;这只是在检索history
元素。
FWIW,该代码已经完美地工作了很多年;升级到PHP7引起了这个问题。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)