isset函數是檢測變數是否設定。
格式:bool isset ( mixed var [, mixed var [, ...]] )
傳回值:
若變數不存在則返回 FALSE
若變數存在且其值為NULL,也返回 FALSE
若變數存在且值不為NULL,則返回 TURE
同時檢查多個變數時,每個單項都符合上一條要求時才返回 TRUE,否則結果為 FALSE
如果已經使用 unset() 釋放了一個變數之後,它將不再是 isset()。若使用 isset() 測試一個被設定成 NULL 的變數,將返回 FALSE。同時要注意的是一個 NULL 位元組("")並不等同於 PHP 的 NULL 常數。
擷取使用者屬性時有的使用者能,有的使用者不能,同樣的邏輯為什麼不能經檢查使用了類似這樣的代碼
代碼如下 |
複製代碼 |
$userInfo=’abc’; if(isset($userInfo['account'])) { $account=$userInfo['account']; } else { $account=$userInfo; } |
發現$account得到的是空,查了一些資料也沒得到結果
做了一個實驗得到了結論
代碼如下 |
複製代碼 |
$a=’abc’; echo $a['account']; |
結果是a
當是字串key沒有時,它會轉化成數字key,是0,所以得到了a
現在php5.4已經修複
趁這機會,整理了一下isset的用法,供大家借鑒
代碼如下 |
複製代碼 |
<?php $var = ''; if (isset($var)) { print "This var is set set so I will print."; } // 在後邊的例子中,我們將使用 var_dump函數 輸出 isset() 的傳回值。 $a = "test"; $b = "anothertest"; var_dump( isset($a) ); // TRUE var_dump( isset ($a, $b) ); // TRUE unset ($a); var_dump( isset ($a) ); // FALSE var_dump( isset ($a, $b) ); // FALSE $foo = NULL; var_dump( isset ($foo) ); // FALSE ?> |
這對於數組中的元素也同樣有效:
代碼如下 |
複製代碼 |
<?php $a = array ('test' => 1, 'hello' => NULL); var_dump( isset ($a['test') ); // TRUE var_dump( isset ($a['foo') ); // FALSE var_dump( isset ($a['hello') ); // FALSE // 'hello' 等於 NULL,所以被認為是未賦值的。 // 如果想檢測 NULL 索引值,可以試試下邊的方法。 var_dump( array_key_exists('hello', $a) ); // TRUE ?> |
鍵 ‘b’ 的值等於 NULL,所以被認為是未置值的。
但是鍵’c'的值是空結果是true,空值是代表 有設定的 如果想檢測 NULL 索引值,可以試試下邊的方法。
代碼如下 |
複製代碼 |
var_dump( array_key_exists(‘hello’, $a) ); // TRUE |
警告: isset() 只能用於變數,因為傳遞任何其它參數都將造成解析錯誤。若想檢測常量是否已設定,可使用 defined() 函數。
一些應用中執行個體
PHP isset()對PHP參數判斷您可以使用 PHP isset() 來判斷一個參數是否被定義,注意如果該參數為空白,或者"n"(NULL位元組)使用 PHP isset() 判斷之後,都會為TRUE。
代碼如下 |
複製代碼 |
<?php $weigeti=''; //這裡初始參數$weigeti=''; $weigeti0=FALSE //這裡初始參數為布爾FALSE $weigeti2=NULL; //這裡定義$weigeti2=NULL,用isset()判斷返回FALSE $weigeti3=""; // 這裡是NULL位元組,用isset()判斷,返回TRUE,不同於NULL常數 $weigeti4="www.v-get.com"; //這裡定義會在下面給unset掉 if(isset($weigeti)){ echo '參數$weigeti已經設定,且值不為NULL'; } // 參數$weigeti已經賦值,而且值為$weigeti='',所以會輸出“參數$weigeti已經設定” if(isset($weigeti0)){ echo '參數$weigeti0已經設定,且值不為NULL'; } // 參數$weigeti0已經賦值,而且值為$weigeti=FALSE,所以會輸出“參數$weigeti已經設定” if(isset($vget)){ echo '參數$vget已經設定,且值不為NULL'; } // 參數$vget根本就沒有被提及過,isset($vget)返回FALSE,不會輸出 if(isset($weigeti2)){ echo '參數$weigeti2已經設定,且值不為NULL'; } // 這裡是$weigeti2雖然被設定了,但是$weigeti2=NULL,所以isset($weigeti2)返回FALSE,不會輸出 if(isset($weigeti3)){ echo '參數$weigeti3已經設定,且值不為NULL'; } // 參數$weigeti3 雖然 就是代表NULL位元組,但是這個不是常數NULL,所以$isset("")返回TRUE,會輸出 unset($weigeti4); //這裡給$weigeti4 釋放掉了 if(isset($weigeti4)){ echo '參數$weigeti4已經設定,且值不為NULL'; } // 雖然開始已經定義$weigeti4,而且還不為NULL,但是後來又給 unset() 掉了,所以不會輸出。 ?> |
PHP isset() 對數組的判斷在使用PHP數組的時候,需要判斷數組的某個值是否存在也可以使用 PHP isset() 函數。
代碼如下 |
複製代碼 |
<?php $V=array( 'WeiGeTi'=>'www.111cn.net', 'V-Get'=>array( 'www'=>'www.v-get.com', 'e'=>'e.v-get.com', 'wuliu'=>array( 'www'=>'wuliu.v-get.com', 'yiwu'=>'www.111cn.net' ) ) ); // var_dump用於輸出TRUE 或 FALSE var_dump(isset($V['WeiGeTi'])); // 數組$V 的$V['WeiGeTi'] ='www.111cn.net'已經存在,所以輸出TRUE
var_dump(isset($V['V-Get']['e'])); //$V['V-Get']['e']='e.v-get.com' 所以輸出 TRUE var_dump(isset($V['V-Get']['wuliu']['yiwu'])); // $V['V-Get']['wuliu']['yiwu']='www.111cn.net'所以輸出TRUE var_dump(isset($V['V-Get']['wuliu']['sh'])); //根據數組,根本就沒有設定該項,所以輸出FALSE ?> |
PHP isset()多參數判斷很多時候我們需要對多個參數進行判斷,可以使用isset($A)&&isset($B)……來判斷這些參數是不是都已經設定了,而且都不為NULL,對此您可以使用isset()多參數來判斷是不是都設定了。
代碼如下 |
複製代碼 |
<?php isset($v1)&&isset($v2)&&isset($v3)…… 等價於 isset($v1,$v2,$v3……) ?>
|
使用isset()判斷多個參數,需要所有參數都被設定,且不為NULL,只要其中有一個參數沒有被設定過,或者為NULL,那麼整個isset()就為FALSE。
PHP isset()判斷$_POST、$_GET、$_REQUEST等值。用isset() 或者empty() 判斷通過表單傳遞來的參數是isset() 最常見的用法。
代碼如下 |
複製代碼 |
if(isset($_POST['from'])&&'E.V-Get.com'==$_POST['from']){ echo '網站通過POST傳遞的來源是E.V-Get.com'; }
|
根據上面我們可以用isset判斷多參數,在對錶單傳遞來的值進行判斷就最方便了。
代碼如下 |
複製代碼 |
<?php //表單傳遞來user使用者名稱和 pass必須同時存在才能執行 if(isset($_POST['user'],$_POST['pass'])){ $user=$_POST['user']; $pass=$_POST['pass']; echo '您填寫的使用者名稱是:',$user,';密碼是:',$pass; } ?> |
PHP isset($var{字串長度}) 判斷字串長度用PHP判斷字串是否存在或者判斷字串長度是否超過某一數字或者判斷字串長度是否為空白一般使用strlen(),但是其實使用isset()效能更優越。
代碼如下 |
複製代碼 |
<?php //三元,等同於 if(isset($_POST['from'])){$weigeti=$_POST['from'];}else{$weiget='';} $weigeti=isset($_POST['from'])?$_POST['from']:''; //判斷$weigeti存在,且字串長度大於0 /* 菜鳥寫法 if(strlen($weigeti)>0){ echo '$weigeti子符長度大於0';} */ // 效能更優越的寫法,判斷$weigeti第1個字元是否設定了 if(isset($weigeti{1})){ echo '$weigeti字元長度大於0'; } ?> |