Подтвердить что ты не робот

PHP - предупреждение - Undefined свойство: stdClass - исправить?

Я получаю это предупреждение в своих журналах ошибок и хочу знать, как исправить эти проблемы в моем коде.

Предупреждение: Замечание PHP: Undefined свойство: stdClass:: $records в script.php в строке 440

Код:

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

Ответ, если записи существуют

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
)

Ответ, если записи не существуют

stdClass Object
(
    [done] => 1
    [queryLocator] =>
    [size] => 0
)

Я думал что-то вроде функции array_key_exists(), но для объектов, что-нибудь? или я иду об этом неправильно?

4b9b3361

Ответ 1

if(isset($response->records))
    print "we've got records!";

Ответ 3

isset() отлично подходит для верхнего уровня, но empty() гораздо полезнее найти, установлены ли вложенные значения. Например:

if(isset($json['foo'] && isset($json['foo']['bar'])) {
    $value = $json['foo']['bar']
}

Или:

if (!empty($json['foo']['bar']) {
    $value = $json['foo']['bar']
}

Ответ 4

Если вы хотите использовать property_exists, вам нужно получить имя класса с get_class()

В этом случае это будет:

 if( property_exists( get_class($response), 'records' ) ){
       $role_arr = getRole($response->records);
 }
 else
 {
       ...
 }

Ответ 5

В этом случае я бы использовал:

if (!empty($response->records)) {
 // do something
}

Вы не получите никаких уродливых уведомлений, если свойство не существует, и вы узнаете, что на самом деле у вас есть некоторые записи для работы, т.е. $response- > records - это не пустой массив, NULL, FALSE или любые другие пустые значения.

Ответ 6

Сам ответ имеет размер записей. Вы можете использовать это, чтобы проверить, существуют ли записи. Что-то вроде:

if($response->size > 0){
    $role_arr = getRole($response->records);
}

Ответ 7

В зависимости от того, ищете ли вы член или метод, вы можете использовать любую из этих двух функций, чтобы узнать, существует ли элемент/метод в определенном объекте:

http://php.net/manual/en/function.method-exists.php

http://php.net/manual/en/function.property-exists.php

В общем, если вы хотите их всех:

http://php.net/manual/en/function.get-object-vars.php

Ответ 8

Если подумайте, что это сработает:

if(sizeof($response->records)>0)
$role_arr = getRole($response->records);

включены новые определенные параметры.