PHP – предупреждение – Неопределенное свойство: stdClass – исправить?

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

Предупреждение: Уведомление PHP: неопределенное свойство: 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 (), но для объектов, что-нибудь? или я об этом ошибаюсь?

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

    Вы можете использовать свойство_exists
    http://www.php.net/manual/en/function.property-exists.php

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

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

    Или:

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

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

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

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

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

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

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

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

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

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

    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

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

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

    Также были включены новые определенные свойства.

    Альтернатива: просто отключите предупреждение, используя оператор «@».

    $ var = getRole (@ $ response-> records);

    См .: http://php.net/manual/en/language.operators.errorcontrol.php