このコードはWebSocketサーバーの一部です:
$msgArray = json_decode($msg);
if ($msgArray->sciID) {
echo "Has sciID";
}
{"sciID":67812343}
のようなjson文字列、または{"something":"else"}
などのsciIDのない完全に異なるjson文字列のいずれかを受け取ります。
サーバーが後者を受信すると、エコーバックします:Notice: Undefined property: stdClass::$sciID in /path/to/file.php on line 10
$msgArray->sciID
が存在するかどうかを確認する正しいコードは何ですか?
isset
を汎用チェックとして使用します( property_exists
オブジェクトを扱っているため):
if (isset($msgArray->sciID)) {
echo "Has sciID";
}
isset()
またはproperty_exists()
が機能しない場合は、 array_key_exists()
を使用できます。
if (array_key_exists("key", $array)) {
echo "Has key";
}
私はいつもisset()
をやってきましたが、友人の1人から提案されたため、最近!empty()
とempty
に変更しました。
isset()
関数は、変数が設定されているか、nullではないかをチェックします。変数が設定されているかどうかだけを知りたい場合は、次の関数を使用します。
function is_set( & $variable ) {
if ( isset( $variable ) and ! is_null( $variable ) )
return true;
else
return false;
}
この関数は、変数が設定されていない場合はtrueを返し、そうでない場合はfalseを返します。 PHPにreferenceを変数に渡すように指示するため、引数の隣の「&」は重要です。変数のvalueではなく、変数が設定されていない場合に「Notice: Undefined variable」を回避します。