PHP: Как проверить, был ли VAR инициализирован? isset возвращает false, когда переменная была установлена ​​в NULL - PullRequest
2 голосов
/ 06 февраля 2009
<?php
    $var = NULL;

    var_dump(isset($var)); // bool(false)
    var_dump(isset($unset_var)); // bool(false)
?>

isset ($ var) должен возвращать TRUE, поскольку для него установлено значение NULL.

Есть ли способ проверить это?

Спасибо!

Ответы [ 6 ]

7 голосов
/ 06 февраля 2009

используйте get_defined_vars (), чтобы получить массив переменных, определенных в текущей области, а затем проверить его с помощью array_key_exists ();

Отредактировано:

если бы вы хотели, чтобы функция проверяла существование, вы бы создали такую:

function varDefined($name,$scope) {
  return array_key_exists($name, $scope);
}

и использовать так же в любой данной области:

$exists = varDefined('foo',get_defined_vars());

Должно работать для любой области.

1 голос
/ 06 февраля 2009

Не очень красиво, но ...

array_key_exists('var', $GLOBALS);

(Вы не можете использовать @is_null($var), потому что он оценивается как true в любом случае [и это не очень хорошая практика, чтобы подавлять ошибки с помощью оператора @ ...])

0 голосов
/ 06 февраля 2009

Если это глобальный, вы можете сделать:

if(array_key_exists('var', $GLOBALS))
0 голосов
/ 06 февраля 2009

По умолчанию переменные не инициализированы в NULL? Таким образом, на самом деле нет разницы между тем, который не был инициирован, и тем, который вы установили в NULL.

0 голосов
/ 06 февраля 2009

если он находится в глобальной области видимости, вы можете попробовать проверить, существует ли ключ в суперглобальном элементе $ GLOBALS (используя array_key_exists ()).

но вы, вероятно, делаете что-то не так, если вам нужно это знать:)

0 голосов
/ 06 февраля 2009

Любая неустановленная переменная будет иметь нулевое значение:

php > $a = null;
php > var_dump($a === null);
bool(true)
php > var_dump($a === $b);
bool(true)

(с использованием интерактивной консоли - php -a)

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