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