2013-05-16 116 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,所以我們可以看到,別的條件執行