Я получаю это предупреждение в своих журналах ошибок и хочу знать, как исправить эти проблемы в моем коде.
Предупреждение: Уведомление 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
В более общем плане, если вы хотите, чтобы все они:
Если подумайте, что это сработает:
if(sizeof($response->records)>0) $role_arr = getRole($response->records);
Также были включены новые определенные свойства.
Альтернатива: просто отключите предупреждение, используя оператор «@».
$ var = getRole (@ $ response-> records);
См .: http://php.net/manual/en/language.operators.errorcontrol.php