web-dev-qa-db-fra.com

PHP - warning - Propriété non définie: stdClass - Correction?

Je reçois cet avertissement dans mes journaux d’erreur et je voulais savoir comment résoudre ce problème dans mon code.

Avertissement: PHP Remarque: propriété non définie: stdClass :: $ records dans script.php à la ligne 440

Un code:

// Parse object to get account id's
// The response doesn't have the records attribute sometimes.
$role_arr = getRole($response->records);  // Line 440 

Réponse si les enregistrements existent

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
)

Réponse si les enregistrements n'existent pas

stdClass Object
(
    [done] => 1
    [queryLocator] =>
    [size] => 0
)

Je pensais à quelque chose comme la fonctionnalité array_key_exists () mais pour les objets, n'importe quoi? ou est-ce que je m'y prends mal?

50
Phill Pafford
if(isset($response->records))
    print "we've got records!";
111
user187291

Dans ce cas, j'utiliserais:

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

Si la propriété n'existe pas, vous ne recevrez aucun avis déplorable, et vous saurez que vous avez en fait des enregistrements avec lesquels travailler, par exemple. $ response-> records n'est pas un tableau vide, NULL, FALSE ou toute autre valeur vide.

5
dazweeja
5
hacksy

isset () convient pour le niveau supérieur, mais empty () est beaucoup plus utile pour déterminer si des valeurs imbriquées sont définies. Par exemple:

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

Ou:

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

Si vous voulez utiliser property_exists, Vous devez obtenir le nom de la classe avec get_class()

Dans ce cas, ce serait:

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

La réponse elle-même semble avoir la taille des enregistrements. Vous pouvez l'utiliser pour vérifier si des enregistrements existent. Quelque chose comme:

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

Si pense que cela fonctionnera:

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

propriétés nouvellement définies incluses aussi.

1
Melsi

Selon que vous recherchez un membre ou une méthode, vous pouvez utiliser l'une de ces deux fonctions pour voir si un membre/une méthode existe dans un objet particulier:

http://php.net/manual/en/function.method-exists.php

http://php.net/manual/en/function.property-exists.php

Plus généralement si vous les voulez tous:

http://php.net/manual/en/function.get-object-vars.php

1
AvatarKava