PHP - 警告 - 未定义属性:stdClass - 修复?

Phi*_*ord 52 php warnings object

我在错误日志中收到此警告,并想知道如何在我的代码中更正此问题.

警告:PHP注意:未定义的属性:第440行的script.php中的stdClass :: $记录

一些代码:

// Parse object to get account id's
// The response doesn't have the records attribute sometimes.
$role_arr = getRole($response->records);  // Line 440 
Run Code Online (Sandbox Code Playgroud)

如果记录存在则响应

stdClass Object
(
    [done] => 1
    [queryLocator] =>
    [records] => Array
        (
            [0] => stdClass Object
                (
                    [type] => User
                    [Id] =>
                    [any] => stdClass Object
                        (
                            [type] => My Role
                            [Id] =>
                            [any] => <sf:Name>My Name</sf:Name>
                        )

                )

        )

    [size] => 1
)
Run Code Online (Sandbox Code Playgroud)

如果记录不存在则响应

stdClass Object
(
    [done] => 1
    [queryLocator] =>
    [size] => 0
)
Run Code Online (Sandbox Code Playgroud)

我在想类似于array_key_exists()的功能,但对于对象,什么?或者我是以错误的方式来做这件事的?

use*_*291 113

if(isset($response->records))
    print "we've got records!";
Run Code Online (Sandbox Code Playgroud)


mar*_*ite 6

isset()适用于顶级,但是empty()更有用于查找是否设置了嵌套值.例如:

if(isset($json['foo'] && isset($json['foo']['bar'])) {
    $value = $json['foo']['bar']
}
Run Code Online (Sandbox Code Playgroud)

要么:

if (!empty($json['foo']['bar']) {
    $value = $json['foo']['bar']
}
Run Code Online (Sandbox Code Playgroud)


daz*_*eja 5

在这种情况下,我会使用:

if (!empty($response->records)) {
 // do something
}
Run Code Online (Sandbox Code Playgroud)

如果该属性不存在,您将不会收到任何丑陋的通知,并且您将知道您实际上已经获得了一些记录,即.$ response-> records不是空数组,NULL,FALSE或任何其他空值.