2013-05-16 78 views
1

此问题仅供参考。如何在PHP中检查变量是否已设置且is_null

我想知道如果有一种方法来检查,如果一个变量is_set,如果是检查是否被设置为null

基础上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
​​

get_defined_vars回报键值对局部变量的作用域(含超全局变量)。

由于array_key_exists返回也是true,当变量为NULL时,可以使用它;那么你只需要检查变量是否为NULLis_null

0

你得到正确的结果,因为当您分配

$x = null;

这意味着你将值分配给$x,这就是为什么一个条件

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

设置为false,这就是控制进入到else部分

isset($x)回报trueis_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

$ X = NULL看; isset($ x)的returens虚假和is_null($ x)返回true,所以我们可以看到,别的条件执行