【问题标题】:PHP: How to get property of non-object (Error msg - Undefined property: stdClass::$0)PHP:如何获取非对象的属性(错误消息 - 未定义的属性:stdClass::$0)
【发布时间】:2019-09-15 13:41:36
【问题描述】:

我将一个 Laravel 项目从一台服务器迁移到另一台服务器,一切正常,除了以下特定代码(以下只是示例代码):

$test_obj = [
    (object) [
        'name' => 'name1',
        'value' => 'value1',
        ],
        (object) [
        'name' => 'name2',
        'value' => 'value2',
        ],
    ];

$first = (object) $test_obj->{0};
echo $first->name;

独立 php 命令的错误消息:

  • 试图在第 14 行获取非对象的属性

关于 Laravel 的错误信息:

  • 未定义属性:stdClass::$0

奇怪的是,相同的用法在以前的服务器上运行良好(相同的 php 和 laravel 版本)。谁能给出可能的解释和解决方案?

【问题讨论】:

  • $test_obj 是一个包含对象的数组,而不是对象本身。试试:$first = $test_obj[0];.
  • $first = ((object)$test_obj)->{0}; 将适用于 PHP7.2+

标签: php


【解决方案1】:

不要使用echo尝试使用var_dump(); die;调试此类问题。看起来这不是一个对象,它可能是一个对象数组。

【讨论】:

    【解决方案2】:

    正如我在你打电话时看到的那样

    $first = (object) $test_obj->{0};
    

    PHP 将 $test_obj->{0} 更改为对象后会调用它

    所以有错误

    Trying to get property of non-object on line number 14
    

    并且$first 对象应该为空并导致

    Undefined property: stdClass::$0
    

    我试过用这个

    $first = ((object) $test_obj)->{0};
    

    但它仅适用于 7.2.x 版本的 PHP。 我希望这可以帮助你。

    【讨论】:

    • 由于$test_obj 是对象的集合,并且像$test_obj[0] 一样容易访问第一个项目,所以我不认为首先将其转换为对象有什么意义。
    • @MagnusEriksson 我认为他可能想将其用作对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多