我正在将php 7升级到php 8.0。在以前的php版本7中,此代码运行良好。
$child_parent['parent'][$resultData->parent_id]->child = 'Yes';
上面的代码在php7中运行良好。现在我正在升级php 8.0版本。在这个新版本中,它给出了这个错误。
遇到未捕获的异常类型:错误
消息:尝试分配属性";"孩子";在空上
不能只为非对象分配属性。这在PHP7上也有错误,而不仅仅是8。
例如:
$arr = [];
$arr['parent'][1]->child = 'yes';
我正在尝试为非对象分配child
属性。$arr['parent'][1]
为空,而不是对象
PHP 7.0-7.4上的结果:
警告:从空值创建默认对象
PHP 8.0+上的结果:
错误:尝试分配属性"孩子";在空上
PHP 7.0+和PHP 8.0+之间的区别是…
在PHP7.0+中,警告级别仍然可以继续处理
而在PHP 8.0+中,这将变为错误级,并将停止处理
如果您显示所有错误或记录所有错误级别,您将看到这不仅仅发生在PHP8.0+上。
要使其工作(分配属性(,您的变量必须是对象。在我的示例中,$arr['parent'][1]
必须是对象。
$arr = [];
$arr['parent'][1] = new stdClass();
$arr['parent'][1]->child = 'yes';
在您的情况下,$child_parent['parent'][$resultData->ModuleID]
和$child_parent['parent'][$resultData->parent_id]
在分配属性之前都需要声明为对象。
if ($resultData->parent_id == 0) {
$child_parent['parent'][$resultData->ModuleID] = $resultData;// I think $resultData is already an object.
$child_parent['parent'][$resultData->ModuleID]->child = 'No';
} else {
$child_parent['child'][$resultData->parent_id][$increment] = $resultData;
$child_parent['parent'][$resultData->parent_id] = new stdClass();// added
$child_parent['parent'][$resultData->parent_id]->child = 'Yes';
// your code
}