为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕桂英546537 2019-06-24 16:26:52
从PHP中的空值创建默认对象?只有在将PHP环境升级到PHP5.4及更高版本之后,我才会看到此错误。错误指向这一行代码:错误:从空值创建默认对象代码:$res->success = false;我首先需要声明我的$res反对?
查看完整描述

3 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

你的新环境E_STRICT警告启用error_reporting对于PHP版本<=5.3.x,或者只是拥有error_reporting至少设置为E_WARNING使用PHP版本>=5.4。当$resNULL或尚未初始化:

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

如果$res已初始化为某些值,但不是对象:

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

为了遵守E_STRICTPHP 5.4之前的标准,或正常的E_WARNINGPHP>=5.4中的错误级别,假设您试图创建一个泛型对象并分配属性success,您需要声明$res作为.的对象stdClass在全局命名空间中:

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


查看完整回答
反对 回复 2019-06-24
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

这个信息E_STRICT对于PHP<=5.3。自从PHP5.4以来,它被不幸地更改为E_WARNING..自E_WARNING消息是有用的,您不想完全禁用它们。

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

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

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


查看完整回答
反对 回复 2019-06-24
?
呼如林

TA贡献1798条经验 获得超3个赞

很简单,

    $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)


查看完整回答
反对 回复 2019-06-24
  • 3 回答
  • 0 关注
  • 904 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信