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

只有在将我的PHP环境升级到PHP 5.4及更高版本后才会看到此错误。 错误指向这行代码:

错误:

从空值创建默认对象

码:

$res->success = false;

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


对于PHP版本<= 5.3.x,您的新环境可能会在error_reporting启用E_STRICT警告,或者仅将error_reporting设置为至少E_WARNING且PHP版本> = 5.4。 当$resNULL或尚未初始化时触发该错误:

$res = NULL;
$res->success = false; // Warning: Creating default object from empty value

如果$res已经初始化为某个值但不是对象,PHP将报告不同的错误消息:

$res = 33;
$res->success = false; // Warning: Attempt to assign property of non-object

为了符合PHP 5.4之前的E_STRICT标准或PHP> = 5.4中的正常E_WARNING错误级别,假设您尝试创建通用对象并指定属性success ,则需要将$res声明$res stdClass的对象在全局命名空间中:

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

PHP的这个消息是E_STRICT <= 5.3。 自从PHP 5.4以来,它不情愿地变成了E_WARNING 。 由于E_WARNING消息很有用,所以您不希望完全禁用它们。

要摆脱此警告,您必须使用以下代码:

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

$res->success = false;

这是完全等效的替代品 。 它确保PHP完全相同的事情 - 不幸的是现在有警告 - 隐式对象创建。 你应该总是检查对象是否已经存在,除非你确定它不存在。 Michael提供的代码通常并不好,因为在某些情况下,对象有时可能已经在代码中的相同位置定义,具体取决于环境。


只是,

    $res = (object)array("success"=>false); // $res->success = bool(false);

要么

    $res = (object)array(); // object(stdClass)

    $res = new stdClass();  // old method

    $res->success = !!0;    // bool(false)

    $res->success = false;  // bool(false)

    $res->success = (bool)0; // bool(false)
链接地址: http://www.djcxy.com/p/10179.html

上一篇: Creating default object from empty value in PHP?

下一篇: content from divs into textarea