Как узнать, существует ли переменная PHP, даже если ее значение NULL?

$a = NULL;
$c = 1;
var_dump(isset($a)); // bool(false)
var_dump(isset($b)); // bool(false)
var_dump(isset($c)); // bool(true)

Как я могу отличить $a, который существует, но имеет значение NULL, от «действительно несуществующего» $b?


person FMaz008    schedule 06.10.2011    source источник
comment
Почему? Просто инициализируйте свои переменные должным образом, и вы знаете, какая из них существует, а какая нет.   -  person KingCrunch    schedule 06.10.2011
comment
Я бы даже не стал использовать isset. Инициализируйте свои переменные, чтобы вы могли предположить, что они существуют.   -  person GolezTrol    schedule 06.10.2011
comment
stackoverflow.com/questions/418066/   -  person aziz punjani    schedule 06.10.2011
comment
@KingCrunch: теоретический вопрос или конкретный крайний случай, в любом случае вопрос не о том, уместно это или нет. Пожалуйста, оставайтесь конструктивными.   -  person FMaz008    schedule 06.10.2011
comment
@Insterstellar_Coder: Спасибо, я не нашел эту тему :) (даже если мне не очень нравится решение _GLOBAL)   -  person FMaz008    schedule 06.10.2011


Ответы (2)


Используйте следующее:

$a = NULL;
var_dump(true === array_key_exists('a', get_defined_vars()));
person Dmytro Shevchenko    schedule 06.10.2011

Было бы интересно узнать, почему вы хотите это сделать, но в любом случае это возможно:

Используйте get_defined_vars, который будет содержать запись для определенных переменных в текущей области, в том числе со значениями NULL. Вот пример его использования

function test()
{
    $a=1;
    $b=null;

    //what is defined in the current scope?
    $defined= get_defined_vars();

    //take a look...
    var_dump($defined);

    //here's how you could test for $b
    $is_b_defined = array_key_exists('b', $defined);
}

test();

Это отображает

array(2) {
  ["a"] => int(1)
  ["b"] => NULL
}
person Paul Dixon    schedule 06.10.2011