empty 和isset 的區別

2021-06-17 00:39:48 字數 1994 閱讀 8339

在使用 php 編寫頁面程式時,我經常使用變數處理函式判斷 php 頁面尾部引數的某個變數值是否為空,開始的時候我習慣了使用 empty() 函式,卻發現了一些問題,因此改用 isset() 函式,問題不再。

顧名思義,empty() 判斷乙個變數是否為「空」,isset() 判斷乙個變數是否已經設定。正是這種所謂的「顧名思義」,令我開始時走了些彎路:當乙個變數值等於0時,empty()也會成立(true),因而會發生一些意外。原來,empty() 和 isset() 雖然都是變數處理函式,它們都用來判斷變數是否已經配置,它們卻是有一定的區別:empty還會檢測變數是否為空、為零。當乙個變數值為0,empty() 認為這個變數同等於空,即相當於沒有設定。

比如檢測 $id 變數,當 $id=0 時,用empty() 和 isset() 來檢測變數 $id 是否已經配置,兩都將返回不同的值—— empty() 認為沒有配置,isset() 能夠取得 $id 的值:

$id=0;

empty($id)?print "it's empty .":print "it's $id ."; 

//結果:it's empty .

print "

";!isset($id)?print "it's empty .":print "it's $id .";

//結果:it's 0 .

這意味著,我們在使用變數處理函式時,當該變數可能出現0的值,使用 empty() 要小心,這個時候用 isset 取代它更明智一些。

當乙個php頁面的 url 尾部引數出現 id=0 時(比如:test.php?id=0),試比較:

if(empty($id)) $id=1; - 若 id=0 ,id 也會為1

if(!isset($id)) $id=1; - 若 id=0 ,id 不會為1

可分開執行以下**檢測上述推斷:

if(empty($id)) $id=1;

print $id; // 得到 1

if(!isset($id)) $id=1;

print $id; //得到 0

要說它們的聯絡,其共同點就是empty()和isset()都是變數處理函式,作用是判斷變數是否已經配置,正是由於它們在處理變數過程中有很大的相似性,才導致對它們的關係認識不足。單從empty()和isset()這兩個函式本身來考慮的話會把人弄得更糊塗,換乙個角度來它。empty()和isset()的處理物件無外乎未定義變數,0,空字串。

如果變數為0,則empty()會返回true,isset()會返回true;

如果變數為空字串,則empty()會返回true,isset()會返回true;

如果變數未定義,則empty()會返回true,isset()會返回flase;

手冊中對empty()的解釋如下:

描述bool empty( mixed var )

如果 var 是非空或非零的值,則 empty() 返回 false。換句話說,""、0、"0"、null、false、array()、var $var; 以及沒有任何屬性的物件都將被認為是空的,如果 var 為空,則返回 true。

手冊中對isset()的解釋如下:

isset()檢測變數是否設定

描述bool isset ( mixed var [, mixed var [, ...]] )

如果 var 存在則返回 true,否則返回 false。

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

警告: isset() 只能用於變數,因為傳遞任何其它引數都將造成解析錯誤。若想檢測常量是否已設定,可使用 defined()函式。

當要 判斷乙個變數是否已經宣告的時候 可以使用 isset 函式

當要 判斷乙個變數是否已經賦予資料且不為空 可以用 empty 函式

當要 判斷 乙個變數 存在且不為空 先isset 函式 再用 empty 函式

isset 和empty 的區別

php的isset 函式 一般用來檢測變數是否設定 格式 bool isset mixed var mixed var 功能 檢測變數是否設定 返回值 若變數不存在則返回 false 若變數存在且其值為null,也返回 false 若變數存在且值不為null,則返回 ture 同時檢查多個變數時,每...

empty 和isset的區別

empty是判斷乙個變數是否為空,如果 變數 是非空或非零的值,則 empty 返回 false。換句話說,0 0 null false array var var 未定義 以及沒有任何屬性的物件都將被認為是空的,如果 var 為空,則返回 true。1 數字0 2 空的字元 3 定義為null的變...

empty和isset的區別

今天再做乙個功能時,需要檢測檢測資料庫某個欄位為是否為空,特地複習了乙個下幾個檢測函式複習一下。判斷乙個變數是否為空 null false 00 0 0 都會返回true。判斷乙個變數是否設定 0 00 0 false false null 都返回true。只有值為null的變數返回true 0 0...