2013-05-16 4 views
1

Этот вопрос только для информации.Как проверить PHP, если переменная установлена ​​и is_null

мне было интересно, если есть способ, чтобы проверить, является ли переменная is_set и если да проверить, если он установлен в нуль

На основе PHP type comparison tables не кажется, что это возможно.

, например, скажем, у нас есть этот код:

<?php 
$x = null; 
if(isset($x) && is_null($x)){ 
    echo '$x is set to NULL'; 
}else{ 
    echo '$x was never initialized'; 
} 
echo "\n"; 
if(isset($y) && is_null($y)){ 
    echo '$y is set to NULL'; 
}else{ 
    echo '$y was never initialized'; 
} 
echo "\n"; 
if(is_null($z)){ 
    echo '$z is set to NULL'; 
}else{ 
    echo '$z was never initialized'; 
} 

?> 

Я бы ожидать, что страница, чтобы показать:

$x is set to NULL 
$y was never initialized 
$z is set to NULL <it should give an E_NOTICE> 

, но я получаю

$x was never initialized 
$y was never initialized 
$z is set to NULL 

ответ

2
$variablename_to_check_against = "varname"; 
$vars = get_defined_vars(); 
if (array_key_exists($variablename_to_check_against, $vars) && is_null($$variablename_to_check_against)) { 
    echo "$variablename_to_check_against is NULL and exists"; 
} 

get_defined_vars возвращается локальная переменная Scope (включительно Суперглобальные) в пар ключ-значение.

Поскольку array_key_exists возвращает также true, когда переменная NULL, вы можете использовать ее; то вам нужно только проверить, является ли переменная NULL с is_null.

0

Ты получение правильного результата, поскольку при назначении

$x = null;

это означает, что вы присвоить значение $x и поэтому условие

if(isset($x) && is_null($x)){

установлен в false и это управление переходит к else части

isset($x) возвращается true но is_null($x) возвращает false, потому что значение установлено (null) и поэтому && возвращает false, а управление переходит на else.

В случае $y

if(isset($y) && is_null($y)){

$y не объявлена. Таким образом, isset($y) - false, и поэтому управление переходит на else часть.

А почему вы получили сообщение о том, что $z$z is set to NULL, потому что вы не должны проверить isset($z) и это null по умолчанию, и поэтому is_null($z) состояние становится true.

+0

Я назначаю значение, и это значение равно NULL, то есть 'is_null ($ x)' должно возвращать true, а также 'isset ($ x)', потому что переменная SET, а значение NULL – Fabrizio

0

& & означает как условия в предложении IF должно быть истинным, так как вы можете видеть в этом Link

$ х = NULL; Исеть ($ х) Returens ложные и is_null ($ х) возвращает истину, так что мы можем видеть, что условия либо еще выполняет