Исправьте PHP-код, чтобы проверить, существует ли переменная - PullRequest
21 голосов
/ 02 мая 2011

Этот код является частью сервера веб-сокетов:

$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?

Ответы [ 5 ]

55 голосов
/ 02 мая 2011

Используйте isset в качестве проверки общего назначения (вы также можете использовать property_exists, поскольку вы имеете дело с объектом):

if (isset($msgArray->sciID)) {
    echo "Has sciID";
}
7 голосов
/ 02 мая 2011
4 голосов
/ 17 января 2014

В случае, если isset() или property_exists() не работает, мы можем использовать array_key_exists()

if (array_key_exists("key", $array)) {
    echo "Has key";
}
0 голосов
/ 29 октября 2012

Функция isset() проверяет, установлена ​​ли переменная и не является ли она нулевой , что действительно глупо, учитывая ее имя. Если вы хотите знать только, установлена ​​ли переменная, используйте следующую функцию:

function is_set( & $variable ) {
    if ( isset( $variable ) and ! is_null( $variable ) )
        return true;
    else
        return false;
}

Эта функция будет возвращать true, когда переменная не установлена, и false в противном случае. '&' Рядом с аргументом важен, потому что он говорит PHP передавать ссылку в переменную, а не значение переменной, таким образом избегая " Примечание: неопределенная переменная ", когда переменная не установлена.

0 голосов
/ 02 мая 2011

Я всегда делал isset(), но недавно я изменил на !empty() и empty, потому что один из моих друзей предложил это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...