轉載: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(),以自身爲參數的區別
- isset()、!empty()會首先檢查變量是否存在(存在返回true),而後再對變量值進行檢測;
is_null()、以自身爲參數,直接檢查變量值是否爲null,若是變量未定義會出現錯誤警告。
- isset()、!empty()的輸入參數必須是一個變量($變量),由於它們是語言結構,不是函數,沒法被變量函數調用(參考閱讀:可變函數);
is_null()、以自身爲參數,輸入參數只要是可以有返回值的就能夠(常量、變量、表達式等均可以);
- 判斷爲空的時刻:
- 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
-
-
$test=array("數值"=>100,"空字符串\"\""=>"","空數組array()"=>array(),"數值0"=>0,"字符\"0\""=>"0","false"=>false,"null"=>null);
-
-
-
-
foreach( $test as $key=>$value){
-
echo 'try:$test',$i,'=',$key,'<br/>';
-
echo 'isset',isset($value)?' 1 define':' 0 undefine','<br/>';
-
echo '!empty',!empty($value)?' 1 no empty':' 0 empty','<br/>';
-
echo '!is_null',!is_null($value)?' 1 no null':' 0 null','<br/>';
-
echo '以自身爲參數',$value?' 1 no null':' 0 null','<br/>';
-
-
-
-
-
-
-
-
echo 'try:$test',$i,'=',$key,'<br/>';
-
echo 'isset',isset($value)?' 1 define':' 0 undefine','<br/>';
-
echo '!empty',!empty($value)?' 1 no empty':' 0 empty','<br/>';
-
echo '!is_null',!is_null($value)?' 1 no null':' 0 null','<br/>';
-
echo '以自身爲參數',$value?' 1 no null':' 0 null','<br/>';
-
-
-
測試結果以下:.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()的輸入參數必須是一個變量
-
-
echo isset($test),'<br/>';
-
echo !empty($test),'<br/>';
-
echo !is_null($test),!is_null(100),!is_null($test=100),'<br/>';