天天看點

php 相等性比較 以及 empty,isset, isnull

變量為空

以下的東西被認為是空的:

  • “” (空字元串)
  • 0 (作為整數的0)
  • 0.0 (作為浮點數的0)
  • “0” (作為字元串的0)
  • NULL
  • FALSE
  • array() (一個空數組)
  • $var; (一個聲明了,但是沒有值的變量)

判斷語句中空值傳回false,以下代碼不會産生任何輸出,因為if 語句中的判斷都為false:

$emptyList = ["",  , , "0", NULL, FALSE, array(), $var, ];
foreach($emptyList as $val) {
    if ($val) {
        var_dump($val);
    }
}
           

比較運算符:

==

===

  • ==

    隻涉及到值的比較
var_dump( == '0.0'); // true
var_dump( == ''); // true
var_dump( == false); // true
           
  • ===

    同時涉及 值 與類型的比較, 更為嚴格
var_dump( === '0.0'); // false
var_dump( === ''); // false
var_dump( === false); // false
           
  • null 與 空值 通過

    ==

    比較, 除了 “0” ,都傳回true:
<?php
$emptyList = ["",  , , "0", NULL, FALSE, array(), $var, ];
foreach($emptyList as $val) {
    var_dump($val == null);
}
           

empty, isset, isnull

  • empty:檢查一個變量是否為空
<?php
$emptyList = ["",  , , "0", NULL, FALSE, array(), $var, ];
foreach ($emptyList as $e) {
    var_dump(empty($e));
}
/*
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
*/
           
  • isset:判斷變量var 存在并且值不是 NULL 則傳回 TRUE,否則傳回 FALSE。
$var = ;
var_dump(isset($var)); // true

unset($var);
var_dump(isset($var)); // false

$var = null;
var_dump(isset($var)); // false
           
  • isnull: 判斷變量是否 為 null , 等價于

    === null

注意

空值之間的

==

比較不一定傳回 true :

// 不具傳遞性
var_dump( == '0'); // true
var_dump('' ==  ); // true
var_dump('0' == ''); // false

var_dump( == []); // false
           

最佳實踐

  • 空值判斷使用 empty 判斷;
  • isset 無法判斷存在但值為null的變量;
  • php

    ==

    ===

    差别在于後者同時進行類型相等判斷