在PHP中从空值创建默认对象?

php
2022-08-30 05:54:25

仅在将 PHP 环境升级到 PHP 5.4 及更高版本后,我才看到此错误。错误指向以下代码行:

错误:

从空值创建默认对象

法典:

$res->success = false;

我首先需要声明我的对象吗?$res


答案 1

您的新环境可能php 版本 <= 5.3.x 的 error_reporting 中启用了警告,或者只是在 PHP 版本 >= 5.4 中至少设置为警告。该错误在 初始化或尚未初始化时触发:E_STRICTerror_reportingE_WARNING$resNULL

$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_STRICTE_WARNINGsuccess$resstdClass

$res = new \stdClass();
$res->success = false;

答案 2

此消息适用于 PHP <= 5.3。从 PHP 5.4 开始,它不幸地更改为 .由于消息很有用,因此您不希望完全禁用它们。E_STRICTE_WARNINGE_WARNING

若要删除此警告,必须使用以下代码:

if (!isset($res)) 
    $res = new stdClass();

$res->success = false;

这是完全等效的替换。它确保了PHP正在默默地做的事情完全相同 - 不幸的是,现在警告 - 隐式对象的创建。您应该始终检查该对象是否已经存在,除非您绝对确定它不存在。Michael 提供的代码一般并不好,因为在某些上下文中,对象有时可能已经在代码中的同一位置定义,具体取决于环境。


推荐