判斷變量是否不爲空,函數isset()、!empty()與!is_null()的比較

轉載:https://blog.csdn.net/qq_38812954/article/details/79581785php

判斷變量的值,尤爲是判斷他們是否不爲空,咱們有如下4種方法:數組

  • if(isset($test)) true:變量已被賦值/設置
  • if(!empty($test)) true:變量不爲空
  • if(!is_null($test)) true:變量不爲空
  • if($test) true:以自身爲參數,變量不爲空

(爲方便討論,empty與is_null均取反值,使4個函數都爲true時,變量不爲空)函數

四個函數的區別,先說結論0,例子具體分析看第1部分。測試


0.總結isset(), !empty(), !is_null(),以自身爲參數的區別

  1. isset()、!empty()會首先檢查變量是否存在(存在返回true),而後再對變量值進行檢測; 
    is_null()、以自身爲參數,直接檢查變量值是否爲null,若是變量未定義會出現錯誤警告。
  2. isset()、!empty()的輸入參數必須是一個變量($變量),由於它們是語言結構,不是函數,沒法被變量函數調用(參考閱讀:可變函數); 
    is_null()、以自身爲參數,輸入參數只要是可以有返回值的就能夠(常量、變量、表達式等均可以);
  3. 判斷爲空的時刻: 
    • isset():僅當 未定義 或者 值爲null 時,返回false;
    • !empty():未定義、 NULL、 「」(空字符)、0、「0」、FALSE、array(),均返回false;
    • !is_null():直接判斷是否不爲null,只有爲null才返回false;未定義會出現錯誤警告;
    • 以自身爲參數:未定義、 NULL、 「」(空字符)、0、「0」、FALSE、array(),均返回false;變量未定義時出現錯誤警告;

1.例子具體分析

4個函數對輸入值爲:數值(正常)、「」(空字符串)、array()(空數組)、0、「0」、false、null、值未定義,8種狀況分別進行檢驗。 
測試代碼以下:spa

  1.  
    <?php
  2.  
    $test=array("數值"=>100,"空字符串\"\""=>"","空數組array()"=>array(),"數值0"=>0,"字符\"0\""=>"0","false"=>false,"null"=>null);
  3.  
    $i=1;
  4.  
    /*將前七種狀況放在數組裏(最後一種是變量未定義),方便後面foreach循環測試*/
  5.  
     
  6.  
    foreach( $test as $key=>$value){
  7.  
    echo 'try:$test',$i,'=',$key,'<br/>';
  8.  
    echo 'isset',isset($value)?' 1 define':' 0 undefine','<br/>';
  9.  
    echo '!empty',!empty($value)?' 1 no empty':' 0 empty','<br/>';
  10.  
    echo '!is_null',!is_null($value)?' 1 no null':' 0 null','<br/>';
  11.  
    echo '以自身爲參數',$value?' 1 no null':' 0 null','<br/>';
  12.  
    echo '<br/>';
  13.  
    ++ $i;
  14.  
    }
  15.  
    /*4個函數對前七種狀況經過foreach循環進行測試輸出,返回1爲true,0爲false。*/
  16.  
     
  17.  
    $key="值未定義";
  18.  
    unset($value);//使用unset()銷燬指定的變量$value;
  19.  
    echo 'try:$test',$i,'=',$key,'<br/>';
  20.  
    echo 'isset',isset($value)?' 1 define':' 0 undefine','<br/>';
  21.  
    echo '!empty',!empty($value)?' 1 no empty':' 0 empty','<br/>';
  22.  
    echo '!is_null',!is_null($value)?' 1 no null':' 0 null','<br/>';
  23.  
    echo '以自身爲參數',$value?' 1 no null':' 0 null','<br/>';
  24.  
    echo '<br/>';
  25.  
    /*對最後一種狀況:變量未定義進行測試*/
  26.  
    ?>

測試結果以下:.net

try:$test1=數值 
isset 1 define 
!empty 1 no empty 
!is_null 1 no null 
以自身爲參數 1 no nullcode

try:$test2=空字符串」」 
isset 1 define 
!empty 0 empty 
!is_null 1 no null 
以自身爲參數 0 nullblog

try:$test3=空數組array() 
isset 1 define 
!empty 0 empty 
!is_null 1 no null 
以自身爲參數 0 null字符串

try:$test4=數值0 
isset 1 define 
!empty 0 empty 
!is_null 1 no null 
以自身爲參數 0 nullget

try:$test5=字符」0」 
isset 1 define 
!empty 0 empty 
!is_null 1 no null 
以自身爲參數 0 null

try:$test6=false 
isset 1 define 
!empty 0 empty 
!is_null 1 no null 
以自身爲參數 0 null

try:$test7=null 
isset 0 undefine 
!empty 0 empty 
!is_null 0 null 
以自身爲參數 0 null

try:$test8=值未定義 
isset 0 undefine 
!empty 0 empty 
!is_null 
Notice: Undefined variable: value in D:\xampp\htdocs\test\0105vs_isset_empty_is_null.php on line 22 
0 null 
以自身爲參數 
Notice: Undefined variable: value in D:\xampp\htdocs\test\0105vs_isset_empty_is_null.php on line 23 
0 null

函數的true/false可用下表進行概括(」1」表true,」0」表false):

函數/$t的值 備註 isset($t) !empty($t) !is_null($t) $t
100 有值 1 1 1 1
「」 空字符串 1 0 1 0
array() 空數組 1 0 1 0
0 數值0 1 0 1 0
「0」 字符0 1 0 1 0
false false 1 0 1 0
null null 0 0 0 0
  這裏$t未定義 0 0 0(Notice) 0(Notice)

從上表可知:

  • 對於值爲null和未定義的變量,四種方式都能返回false 
    • 其中,!is_null()和「以自身爲參數」對於未定義的變量還會出現Notice直接報錯;
  • !empty()和「以自身爲參數」 還會對「」、array()、0、「0」、false,均返回false;
  • 而isset()和!is_null()只對null和未定義變量作出false判斷;

isset()、!empty()的輸入參數必須是一個變量

  1.  
    $test=100;
  2.  
    echo isset($test),'<br/>';
  3.  
    echo !empty($test),'<br/>';
  4.  
    echo !is_null($test),!is_null(100),!is_null($test=100),'<br/>';
    • 只有!is_null(),能夠直接寫!is_null(100),!is_null($b=100);

    • 而isset()和!empty()這樣寫會報錯,輸入參數只能寫入一個變量($變量)

    • 由於isset()和!empty()是語言結構,is_null()是一個函數;
相關文章
相關標籤/搜索