php empty 和isset 的區別

2021-06-22 11:22:47 字數 2344 閱讀 9828

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

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

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

[php]view plain

copy

$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),試比較:

[html]view plain

copy

if(empty($id)) $id=

1; - 若 id=

0,id 也會為1  

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

; - 若 id=

0,id 不會為1  

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

[php]view plain

copy

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 函式

php empty 和isset 的區別

在使用 php 編寫頁面程式時,我經常使用變數處理函式判斷 php 頁面尾部引數的某個變數值是否為空,開始的時候我習慣了使用 empty 函式,卻發現了一些問題,因此改用 isset 函式,問題不再。顧名思義,empty 判斷乙個變數是否為 空 isset 判斷乙個變數是否已經設定。正是這種所謂的 ...

php empty 和isset 的區別

在使用 php 編寫頁面程式時,我經常使用變數處理函式判斷 php 頁面尾部引數的某個變數值是否為空,開始的時候我習慣了使用 empty 函式,卻發現了一些問題,因此改用 isset 函式,問題不再。顧名思義,empty 判斷乙個變數是否為 空 isset 判斷乙個變數是否已經設定。正是這種所謂的 ...

php empty 和isset 的區別

在使用 php 編寫頁面程式時,我經常使用變數處理函式判斷 php 頁面尾部引數的某個變數值是否為空,開始的時候我習慣了使用 empty 函式,卻發現了一些問題,因此改用 isset 函式,問題不再。顧名思義,empty 判斷乙個變數是否為 空 isset 判斷乙個變數是否已經設定。正是這種所謂的 ...