【发布时间】:2022-01-24 08:28:42
【问题描述】:
我正在将 php 7 升级到 php 8.0。在以前的 php 版本 7 中,此代码工作正常。
$child_parent['parent'][$resultData->parent_id]->child = 'Yes';
以上代码在 php 7 中运行良好。现在我正在升级 php 版本 8.0。在这个新版本中,它给出了这个错误。
遇到未捕获的异常类型:错误
消息:尝试在 null 上分配属性“child”
详细代码:-
$currentFile = $_SERVER["REQUEST_URI"];
$parts = Explode('/', $currentFile);
$currnet_menu = $parts[count($parts) - 1];
$child_parent = array();
$parent = array();
$new_array = array();
$increment = 0;
foreach ($menu_data as $key => $resultData) {
//echo"<pre>";print_r($resultData);
//stdClass Object //output of $resultData
//(
// [key_id] => 67
// [key_update_date] =>
// [key_update_by] =>
// [GroupModuleID] => 67
// [ModuleID] => 38
// [GroupId] => 1
// [ModuleName] => home
// [display_name] => Home Page
// [super_use] => 0
// [Mid] => 38
// [description] =>
// [parent_id] => 0
// [display_in_menu] => 1
// [module_icon] => home
// [groupName] => Super Admin
// [Uid] => 119
// [icon_html] =>
// [total_count] => 0
// [has_more_records] => 0
)
if ($resultData->display_in_menu == 1) {
array_push($parent, $resultData->parent_id);
if (in_array($resultData->parent_id, $parent)) {
if ($resultData->parent_id == 0) {
$child_parent['parent'][$resultData->ModuleID] = $resultData;
$child_parent['parent'][$resultData->ModuleID]->child = 'No';
} else {
$child_parent['child'][$resultData->parent_id][$increment] = $resultData;
$child_parent['parent'][$resultData->parent_id]->child = 'Yes';
$parts1 = Explode('/', $resultData->ModuleName);
$currnet_menu_check = $parts1[count($parts1) - 1];
if ($currnet_menu_check == $currnet_menu) {
$new_array[$resultData->parent_id]->open_child = 'Yes';
}
}
$increment++;
}
}
}
提前致谢。
【问题讨论】:
-
这意味着
$child_parent['parent'][$resultData->parent_id]是null并且您正在尝试访问null上的child属性。转到上一步检查它为什么为空。 -
你应该检查你的 $child_parent['parent'] 数组,然后检查 $resultData->parent_id 的值,因为 $child_parent['parent'][$resultData->parent_id] 评估为 NULL,并尝试在 NULL 上分配属性已经是 php7 中的错误。
-
在 php7 中,此代码工作正常: $child_parent['parent'][$resultData->parent_id]->child = 'Yes';它回显“是”。在 php 8 中,它给出了错误。
-
它可能之前给出了警告,而不是错误。 PHP 8 更加严格,让做傻事变得更加困难。同样,解决方案是找出它为空的原因并修复错误
-
是的,我已经解释了为什么它工作“很好”......因为实际上它可能没有,它只是没有崩溃。无论是那个还是问题都与您的升级无关,实际上只是一些不同的数据导致了它。无论哪种方式,您都需要对其进行调试和修复。这是底线。我们无法告诉您为什么它为空,因为我们没有您的所有数据或所有相关代码
标签: php codeigniter php-8