Ce code fait partie d'un serveur websocket:
$msgArray = json_decode($msg);
if ($msgArray->sciID) {
echo "Has sciID";
}
Il recevra soit une chaîne json comme {"sciID":67812343}
ou une chaîne json complètement différente sans sciID telle que {"something":"else"}
.
Lorsque le serveur reçoit la dernière, il fait écho: Notice: Undefined property: stdClass::$sciID in /path/to/file.php on line 10
Quel est le bon code pour vérifier si $msgArray->sciID
existe?
Utilisez isset
comme vérification générale (vous pouvez également utiliser property_exists
puisque vous avez affaire à un objet):
if (isset($msgArray->sciID)) {
echo "Has sciID";
}
Dans le cas où isset()
ou property_exists()
ne fonctionne pas, nous pouvons utiliser array_key_exists()
if (array_key_exists("key", $array)) {
echo "Has key";
}
J'ai toujours fait isset()
mais j'ai récemment changé pour !empty()
et empty
parce qu'un de mes amis l'a suggéré.
La fonction isset()
vérifie si une variable est définie et n'est pas nulle , ce qui est vraiment stupide, étant donné son nom. Si vous voulez seulement savoir si une variable est définie, utilisez la fonction suivante:
function is_set( & $variable ) {
if ( isset( $variable ) and ! is_null( $variable ) )
return true;
else
return false;
}
Cette fonction renverra true exactement lorsque la variable n'est pas définie et false sinon. Le '&' à côté de l'argument est important, car il indique PHP pour passer une référence à la variable, et non la valeur de la variable, évitant ainsi une "Remarque: variable non définie" lorsque la variable n'est pas définie.