将php版本升级到8后,会显示此错误



我正在将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
}

相关内容

  • 没有找到相关文章

最新更新