将php版本升级到8后,出现这个错误
After upgrade php version to 8, this error display
我正在将 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
详细代码:-
$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++;
}
}
}
提前致谢。
您不能只对非对象分配 属性。
这也在 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+中,警告级别仍然可以继续处理
而在 PHP 8.0+ 中,这变成了 Error 级别并且将停止进程。
如果您显示所有错误或记录所有错误级别,您会发现这不仅发生在 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 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
详细代码:-
$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++;
}
}
}
提前致谢。
您不能只对非对象分配 属性。 这也在 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+中,警告级别仍然可以继续处理
而在 PHP 8.0+ 中,这变成了 Error 级别并且将停止进程。
如果您显示所有错误或记录所有错误级别,您会发现这不仅发生在 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
}