gpt4 book ai didi

php - 升级php版本到8后,出现这个错误

转载 作者:行者123 更新时间:2023-12-05 01:54:54 24 4
gpt4 key购买 nike

我正在将 php 7 升级到 php 8.0。在以前的 php 版本 7 中,这段代码工作正常。

$child_parent['parent'][$resultData->parent_id]->child = 'Yes';

上面的代码在 php 7 中运行良好。现在我正在升级 php 8.0 版。在这个新版本中,它给出了这个错误。

An uncaught Exception was encountered Type: Error

Message: Attempt to assign property "child" on null

最佳答案

您不能只为非对象分配属性。这在 PHP 7 上也会出错,而不仅仅是 8。

例如:

$arr = [];

$arr['parent'][1]->child = 'yes';

我正在尝试为非对象分配 child 属性。 $arr['parent'][1] 是空的,不是对象。
PHP 7.0 - 7.4 上的结果:

Warning: Creating default object from empty value

PHP 8.0+ 上的结果:

Error: Attempt to assign property "child" on null

PHP 7.0+ 和 PHP 8.0+ 的区别是……
在PHP7.0+中,Warning级别仍然可以继续处理
而在 PHP 8.0+ 中,这会变为错误 级别,并将停止进程。
如果您显示所有错误或记录所有错误级别,您会发现这不仅仅发生在 PHP 8.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
}

关于php - 升级php版本到8后,出现这个错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70460493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com