isset 與 empty 的區別

2022-04-11 22:32:20 字數 4806 閱讀 4240

php的isset()函式 一般用來檢測變數是否設定

格式:bool isset ( mixed var [, mixed var [, ...]] )

功能:檢測變數是否設定

返回值:

若變數不存在則返回 false

若變數存在且其值為null,也返回 false

若變數存在且值不為null,則返回 ture

同時檢查多個變數時,每個單項都符合上一條要求時才返回 true,否則結果為 false

版本:php 3, php 4, php 5

更多說明:

使用 unset() 釋放變數之後,它將不再是 isset()。

php函式isset()只能用於變數,傳遞任何其它引數都將造成解析錯誤。

檢測常量是否已設定可使用 defined() 函式。

php的empty()函式 判斷值為否為空

格式:bool empty ( mixed var )

功能:檢查乙個變數是否為空

返回值:

若變數不存在則返回 true

若變數存在且其值為""、0、"0"、null、、false、array()、var $var; 以及沒有任何屬性的物件,則返回 ture

若變數存在且值不為""、0、"0"、null、、false、array()、var $var; 以及沒有任何屬性的物件,則返回 false

版本:php 3, php 4, php 5

更多說明:

empty()的返回值=!(boolean) var,但不會因為變數未定義而產生警告資訊。參見轉換為布林值獲取更多資訊。

empty() 只能用於變數,傳遞任何其它引數都將造成paser error而終止執行。

檢測常量是否已設定可使用 defined() 函式。

例子: empty() 與 isset() 的乙個簡單比較

複製** **如下:

<?php

$var = 0;

// 結果為 true,因為 $var 為空

if (empty($var))

// 結果為 false,因為 $var 已設定

if (!isset($var))

?>

注: 由於這是乙個語言結構而非函式,因此它無法被變數函式呼叫。

注: empty() 只檢測變數,檢測任何非變數的東西都將導致解析錯誤。換句話說,後邊的語句將不會起作用: empty(addslashes($name))。

下面是經過指令碼之家測試過的一段isset與empty函式詳細例子的**,看完這個基本上就差不多了:

複製** **如下:

<?php

error_reporting(e_all);

echo '未定義$var

'; echo "isset測試:

"; if ( isset ( $var ))

echo "empty測試:

"; if ( empty ( $var ))

else

echo "變數直接測試:

"; if ( $var )

else

echo '----------------------------------

'; echo '$var = \'\'

'; echo "isset測試:

"; $var = '';

if ( isset ( $var ))

echo "empty測試:

"; if ( empty ( $var ))

else

echo "變數直接測試:

"; if ( $var )

else

echo '----------------------------------

'; echo '$var = 0

'; echo 'isset測試:

'; $var = 0 ;

if ( isset ( $var ))

echo "empty測試:

"; if ( empty ( $var ))

else

echo "變數直接測試:

"; if ( $var )

else

echo '----------------------------------

'; echo '$var = null

'; echo 'isset測試:

'; $var = null ;

if ( isset ( $var ))

echo "empty測試:

"; if ( empty ( $var ))

else

echo "變數直接測試:

"; if ( $var )

else

echo '----------------------------------

'; echo '$var ="php"

'; echo 'isset測試:

'; $var = "php";

if ( isset ( $var ))

echo "empty測試:

"; if ( empty ( $var ))

else

echo "變數直接測試:

"; if ( $var )

else

?>

在使用 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 位元組(」?」)並不等同於 php 的 null 常數。

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

isset 和empty 的區別

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

empty 和isset 的區別

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

empty 和isset的區別

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