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?
if(isset($response->records))
print "we've got records!";
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.
Vous pouvez utiliser property_exists
http://www.php.net/manual/en/function.property-exists.php
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']
}
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
{
...
}
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);
}
Si pense que cela fonctionnera:
if(sizeof($response->records)>0)
$role_arr = getRole($response->records);
propriétés nouvellement définies incluses aussi.
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: