PHP - предупреждение - неопределенное свойство: stdClass - исправить? - PullRequest
50 голосов
/ 18 марта 2010

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

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

Ответы [ 8 ]

111 голосов
/ 18 марта 2010
if(isset($response->records))
    print "we've got records!";
5 голосов
/ 03 июля 2013

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

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

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

5 голосов
/ 18 марта 2010

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

4 голосов
/ 17 апреля 2015

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

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

Или:

if (!empty($json['foo']['bar']) {
    $value = $json['foo']['bar']
}
3 голосов
/ 19 сентября 2012

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

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

 if( property_exists( get_class($response), 'records' ) ){
       $role_arr = getRole($response->records);
 }
 else
 {
       ...
 }
2 голосов
/ 18 марта 2010

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

if($response->size > 0){
    $role_arr = getRole($response->records);
}
1 голос
/ 25 декабря 2011

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

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

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

1 голос
/ 18 марта 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...