1. 程式人生 > >php用isset()判斷變數是否定義的存在的坑

php用isset()判斷變數是否定義的存在的坑

在寫php程式時,我們通常用isset()來檢測變數是否定義,但其中存在一個問題,看手冊上對該方法的描述:

bool isset ( mixed $var [, mixed $... ] )

檢測變數是否設定,並且不是 NULL

如果已經使用 釋放了一個變數之後,它將不再是 isset() 。若使用 isset() 測試一個被設定成 NULL 的變數,將返回 FALSE 。同時要注意的是一個 NULL 位元組("\0")並不等同於 PHP 的 NULL 常數。

If multiple parameters are supplied then isset() will return TRUE

only if all of the parameters are set. Evaluation goes from left to right and stops as soon as an unset variable is encountered. 


也就是被初始化成 NULL的變數,用改方法檢測時也會返回false,例如:

<?php

$var = null;
$arr['key'] = null;

if(isset($var)){
	echo 'set<br>';
}else{
	echo 'no set<br>';
}

if(isset($arr['key'])){
	echo 'set<br>';
}else{
	echo 'no set<br>';
}
執行結果:
no set
no set

當然這種情況是比較少見的,我們平時在初始化變數時儘量避免NULL,但有時在取資料庫時無可避免的取回NULL,這種情況我們可以用array_key_exists()函式來判斷某個欄位是否被取出來了,比如:
<?php

$arr['key'] = null;

if(array_key_exists('key' , $arr)){
	echo 'set<br>';
}else{
	echo 'no set<br>';
}

if(array_key_exists('key2' , $arr)){
	echo 'set<br>';
}else{
	echo 'no set<br>';
}
執行結果:
set
no set


bool array_key_exists ( mixed $key , array $search )

array_key_exists() 在給定的 key 存在於陣列中時返回 TRUE key 可以是任何能作為陣列索引的值。 array_key_exists() 也可用於物件。