Ответ 1
Используйте isset
в качестве проверки общего назначения (вы также можете использовать property_exists
, так как вы дело с объектом):
if (isset($msgArray->sciID)) {
echo "Has sciID";
}
Этот код является частью сервера websocket:
$msgArray = json_decode($msg);
if ($msgArray->sciID) {
echo "Has sciID";
}
Он будет либо получать json-строку, как {"sciID":67812343}
, либо совершенно другую строку json без sciID, например {"something":"else"}
.
Когда сервер получает позднее, он выдает: 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()
, но недавно я изменился на !empty()
и empty
, потому что это предложил один из моих друзей.
Функция isset()
проверяет, установлена ли переменная и не является нулевой, что действительно глупо, учитывая ее имя. Если вы хотите узнать только, установлена ли переменная, используйте следующую функцию:
function is_set( & $variable ) {
if ( isset( $variable ) and ! is_null( $variable ) )
return true;
else
return false;
}
Эта функция вернет true точно, когда переменная не установлена, и false в противном случае. "&" рядом с аргументом важно, потому что он сообщает PHP передавать ссылку на переменную, а не значение переменной, тем самым избегая " Примечание: Undefined переменная", когда переменная не является набор.