在PHP中从空值创建默认对象?
2022-08-30 05:54:25
仅在将 PHP 环境升级到 PHP 5.4 及更高版本后,我才看到此错误。错误指向以下代码行:
错误:
从空值创建默认对象
法典:
$res->success = false;
我首先需要声明我的对象吗?$res
仅在将 PHP 环境升级到 PHP 5.4 及更高版本后,我才看到此错误。错误指向以下代码行:
错误:
从空值创建默认对象
法典:
$res->success = false;
我首先需要声明我的对象吗?$res
您的新环境可能在 php 版本 <
= 5.3.x 的 error_reporting 中启用了警告,或者只是在 PHP 版本 >= 5.4 中至少设置为警告。该错误在 初始化或尚未初始化时触发:E_STRICT
error_reporting
E_WARNING
$res
NULL
$res = NULL;
$res->success = false; // Warning: Creating default object from empty value
如果 PHP 已初始化为某个值但不是对象,则会报告不同的错误消息:$res
$res = 33;
$res->success = false; // Warning: Attempt to assign property of non-object
为了符合 PHP 5.4 之前的标准,或者 PHP >= 5.4 中的正常错误级别,假设您正在尝试创建一个泛型对象并分配属性,则需要在全局命名空间中声明为 的对象:E_STRICT
E_WARNING
success
$res
stdClass
$res = new \stdClass();
$res->success = false;
此消息适用于 PHP <= 5.3。从 PHP 5.4 开始,它不幸地更改为 .由于消息很有用,因此您不希望完全禁用它们。E_STRICT
E_WARNING
E_WARNING
若要删除此警告,必须使用以下代码:
if (!isset($res))
$res = new stdClass();
$res->success = false;
这是完全等效的替换。它确保了PHP正在默默地做的事情完全相同 - 不幸的是,现在警告 - 隐式对象的创建。您应该始终检查该对象是否已经存在,除非您绝对确定它不存在。Michael 提供的代码一般并不好,因为在某些上下文中,对象有时可能已经在代码中的同一位置定义,具体取决于环境。