在PHP中从空值创建默认对象?
只有在将我的PHP环境升级到PHP 5.4及更高版本后才会看到此错误。 错误指向这行代码:
错误:
从空值创建默认对象
码:
$res->success = false;
我首先需要声明我的$res
对象吗?
对于PHP版本<= 5.3.x,您的新环境可能会在error_reporting
启用E_STRICT
警告,或者仅将error_reporting
设置为至少E_WARNING
且PHP版本> = 5.4。 当$res
为NULL
或尚未初始化时触发该错误:
$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