Ответ 1
if(isset($response->records))
print "we've got records!";
Я получаю это предупреждение в своих журналах ошибок и хочу знать, как исправить эти проблемы в моем коде.
Предупреждение: Замечание 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(), но для объектов, что-нибудь? или я иду об этом неправильно?
if(isset($response->records))
print "we've got records!";
Вы можете использовать property_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