isset函數(shù)我們多用于判斷變量是不是存在了,如isset($a)了,如果存在返回 true,否則返回false了,下面我們一起來看看.
isset函數(shù)是檢測(cè)變量是否設(shè)置.
格式:bool isset ( mixed var [, mixed var [, ...]] )
返回值:若變量不存在則返回 FALSE,若變量存在且其值為NULL,也返回 FALSE,若變量存在且值不為NULL,則返回 TURE,同時(shí)檢查多個(gè)變量時(shí),每個(gè)單項(xiàng)都符合上一條要求時(shí)才返回 TRUE,否則結(jié)果為 FALSE.
如果已經(jīng)使用 unset() 釋放了一個(gè)變量之后,它將不再是 isset(),若使用 isset() 測(cè)試一個(gè)被設(shè)置成 NULL 的變量,將返回 FALSE,同時(shí)要注意的是一個(gè) NULL 字節(jié)("")并不等同于 PHP 的 NULL 常數(shù).
獲取用戶屬性時(shí)有的用戶能,有的用戶不能,同樣的邏輯為什么不能經(jīng)檢查使用了類似這樣的代碼:
- $userInfo=’abc’;
- if(isset($userInfo['account'])) {
- $account=$userInfo['account'];
- } else {
- $account=$userInfo;
- }
發(fā)現(xiàn)$account得到的是空,查了一些資料也沒得到結(jié)果,做了一個(gè)實(shí)驗(yàn)得到了結(jié)論,代碼如下:
$a=’abc;echo $a['account'];
結(jié)果是a,當(dāng)是字符串key沒有時(shí),它會(huì)轉(zhuǎn)化成數(shù)字key,是0,所以得到了a,現(xiàn)在php5.4已經(jīng)修復(fù),趁這機(jī)會(huì),整理了一下isset的用法,供大家借鑒,代碼如下:
- <?php
- $var = '';
- if (isset($var)) {
- print "This var is set set so I will print.";
- }
- // 在后邊的例子中,我們將使用 var_dump函數(shù) 輸出 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
- ?>
這對(duì)于數(shù)組中的元素也同樣有效,代碼如下:
- <?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
- //開源代碼Vevb.com
- // 'hello' 等于 NULL,所以被認(rèn)為是未賦值的。
- // 如果想檢測(cè) NULL 鍵值,可以試試下邊的方法。
- var_dump( array_key_exists('hello', $a) ); // TRUE
- ?>
鍵 ‘b’ 的值等于 NULL,所以被認(rèn)為是未置值的,但是鍵’c'的值是空結(jié)果是true,空值是代表 有設(shè)置的 如果想檢測(cè) NULL 鍵值,可以試試下邊的方法,代碼如下:
var_dump( array_key_exists(‘hello’, $a) ); // TRUE
警告:isset() 只能用于變量,因?yàn)閭鬟f任何其它參數(shù)都將造成解析錯(cuò)誤,若想檢測(cè)常量是否已設(shè)置,可使用 defined() 函數(shù).
一些應(yīng)用中實(shí)例:PHP isset()對(duì)PHP參數(shù)判斷您可以使用 PHP isset() 來判斷一個(gè)參數(shù)是否被定義,注意如果該參數(shù)為空,或者"n"(NULL字節(jié))使用 PHP isset() 判斷之后,都會(huì)為TRUE,代碼如下:
- <?php
- $weigeti=''; //這里初始參數(shù)$weigeti='';
- $weigeti0=FALSE //這里初始參數(shù)為布爾FALSE
- $weigeti2=NULL; //這里定義$weigeti2=NULL,用isset()判斷返回FALSE
- $weigeti3=""; // 這里是NULL字節(jié),用isset()判斷,返回TRUE,不同于NULL常數(shù)
- $weigeti4="www.companysz.com"; //這里定義會(huì)在下面給unset掉
- if(isset($weigeti)){ echo '參數(shù)$weigeti已經(jīng)設(shè)定,且值不為NULL'; }
- // 參數(shù)$weigeti已經(jīng)賦值,而且值為$weigeti='',所以會(huì)輸出“參數(shù)$weigeti已經(jīng)設(shè)定”
- if(isset($weigeti0)){ echo '參數(shù)$weigeti0已經(jīng)設(shè)定,且值不為NULL'; }
- // 參數(shù)$weigeti0已經(jīng)賦值,而且值為$weigeti=FALSE,所以會(huì)輸出“參數(shù)$weigeti已經(jīng)設(shè)定”
- if(isset($vget)){ echo '參數(shù)$vget已經(jīng)設(shè)定,且值不為NULL'; }
- // 參數(shù)$vget根本就沒有被提及過,isset($vget)返回FALSE,不會(huì)輸出
- if(isset($weigeti2)){ echo '參數(shù)$weigeti2已經(jīng)設(shè)定,且值不為NULL'; }
- // 這里是$weigeti2雖然被設(shè)定了,但是$weigeti2=NULL,所以isset($weigeti2)返回FALSE,不會(huì)輸出
- if(isset($weigeti3)){ echo '參數(shù)$weigeti3已經(jīng)設(shè)定,且值不為NULL'; }
- // 參數(shù)$weigeti3 雖然 就是代表NULL字節(jié),但是這個(gè)不是常數(shù)NULL,所以$isset("")返回TRUE,會(huì)輸出
- unset($weigeti4); //這里給$weigeti4 釋放掉了
- if(isset($weigeti4)){ echo '參數(shù)$weigeti4已經(jīng)設(shè)定,且值不為NULL'; }
- // 雖然開始已經(jīng)定義$weigeti4,而且還不為NULL,但是后來又給 unset() 掉了,所以不會(huì)輸出。
- ?>
PHP isset() 對(duì)數(shù)組的判斷在使用PHP數(shù)組的時(shí)候,需要判斷數(shù)組的某個(gè)值是否存在也可以使用 PHP isset() 函數(shù),代碼如下:
- <?php
- $V=array(
- 'WeiGeTi'=>'www.Vevb.net',
- 'V-Get'=>array(
- 'www'=>'www.companysz.com',
- 'e'=>'e.v-get.com',
- 'wuliu'=>array(
- 'www'=>'wuliu.Vevb.com',
- 'yiwu'=>'www.companysz.com'
- )
- )
- );
- // var_dump用于輸出TRUE 或 FALSE
- var_dump(isset($V['WeiGeTi']));
- // 數(shù)組$V 的$V['WeiGeTi'] ='www.companysz.com'已經(jīng)存在,所以輸出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.companysz.com'所以輸出TRUE
- var_dump(isset($V['V-Get']['wuliu']['sh']));
- //根據(jù)數(shù)組,根本就沒有設(shè)定該項(xiàng),所以輸出FALSE
- ?>
PHP isset()多參數(shù)判斷很多時(shí)候我們需要對(duì)多個(gè)參數(shù)進(jìn)行判斷,可以使用isset($A)&&isset($B)……來判斷這些參數(shù)是不是都已經(jīng)設(shè)定了,而且都不為NULL,對(duì)此您可以使用isset()多參數(shù)來判斷是不是都設(shè)定了,代碼如下:
- <?php
- isset($v1)&&isset($v2)&&isset($v3)……
- 等價(jià)于
- isset($v1,$v2,$v3……)
- ?>
使用isset()判斷多個(gè)參數(shù),需要所有參數(shù)都被設(shè)定,且不為NULL,只要其中有一個(gè)參數(shù)沒有被設(shè)定過,或者為NULL,那么整個(gè)isset()就為FALSE.
PHP isset()判斷$_POST、$_GET、$_REQUEST等值,用isset() 或者empty() 判斷通過表單傳遞來的參數(shù)是isset() 最常見的用法,代碼如下:
- if(isset($_POST['from'])&&'E.V-Get.com'==$_POST['from']){
- echo '網(wǎng)站通過POST傳遞的來源是E.V-Get.com';
- }
根據(jù)上面我們可以用isset判斷多參數(shù),在對(duì)表單傳遞來的值進(jìn)行判斷就最方便了,代碼如下:
- <?php
- //表單傳遞來user用戶名和 pass必須同時(shí)存在才能執(zhí)行
- if(isset($_POST['user'],$_POST['pass'])){
- $user=$_POST['user'];
- $pass=$_POST['pass'];
- echo '您填寫的用戶名是:',$user,';密碼是:',$pass;
- }
- ?>
PHP isset($var{字符串長度}) 判斷字符串長度用PHP判斷字符串是否存在或者判斷字符串長度是否超過某一數(shù)字或者判斷字符串長度是否為空一般使用strlen(),但是其實(shí)使用isset()性能更優(yōu)越,代碼如下:
- <?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';}
- */
- // 性能更優(yōu)越的寫法,判斷$weigeti第1個(gè)字符是否設(shè)定了
- if(isset($weigeti{1})){
- echo '$weigeti字符長度大于0';
- }
- ?>
新聞熱點(diǎn)
疑難解答