PHP中empty()與isset()的區別

BB在前面

在PHP中,大多數情況下檢測變量時使用empty()isset(),在不考慮極微小的性能差異的情況下是可以混用的,但它們之間的使用差異依舊會影響到我們程序的穩定運行。

empry()

判斷一個變量是否被認為是空的。當一個變量并不存在,或者它的值等同于 FALSE,那么它會被認為不存在。如果變量不存在的話,empty()并不會產生警告。

$a1 = [];
$a2 = [1,2,3];

$a4 = null;
$a5 = false;
$a6 = 0;
$a7 = 'null'

var_dump(empty($a1)); //true
var_dump(empty($a2)); //false
var_dump(empty($a3)); //true
var_dump(empty($a4)); //true
var_dump(empty($a5)); //true
var_dump(empty($a6)); //true

可以看出只要值等同于false的變量檢測變量是否為空時,都是返回true,并且檢測不存在的變量(代碼中的$a3并未定義)時,代碼并不會報錯,所以可以認為empty()isset()的作用

注:empty()并不能檢測空對象(new \stdClass(object)[])是否為空,檢測方法使用count()或get_class_varsget_class_methods都為空

isset()

檢測變量是否設置,并且不是 NULL。
如果已經使用 unset() 釋放了一個變量之后,它將不再是 isset()。若使用 isset() 測試一個被設置成 NULL 的變量,將返回 FALSE。同時要注意的是一個 NULL 字節("\0")并不等同于 PHP 的 NULL 常數。

$a1 = [];
$a2 = [1,2,3];

$a4 = null;
$a5 = false;
$a6 = 0;
$a7 = 'null';

var_dump(isset($a1)); // true
var_dump(isset($a2)); // true
var_dump(isset($a3)); // false
var_dump(isset($a4)); // false
var_dump(isset($a5)); // true
var_dump(isset($a6)); // true
var_dump(isset($a7)); // true

可以看出來只有在變量未定義或被設置為null時 ,返回false,設置為其他值等同于與false的值,都返回true

大膽猜測:當變量被定義為null是返回false的原因可能是和PHP的垃圾回收機制有關。PHP 使用了引用計數 (reference counting) GC 機制。每個對象都內含一個引用計數器 refcount,每個 reference 連接到對象,計數器加 1。當 reference 離開生存空間或被設為 NULL,計數器減 1。當某個對象的引用計數器為零時,PHP 知道你將不再需要使用這個對象,釋放其所占的內存空間。

總結

當我們需要判斷變量是否被定義或為NULL,使用iseet(),判斷變量是否是一個為false的值使用empty()

附:值為false的值

字符類型:''、""、'0'、"0"
數字類型:0
布爾類型: false
空類型:null、NULL
數組類型:[]

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • PHP的isset()函數 一般用來檢測變量是否設置 格式:bool isset ( mixed var [, m...
    寄去遠方的盛夏閱讀 437評論 0 2
  • php可以做什么 php是一種可以在服務器端運行的編程語言,可以運行在Web服務器端。 php是一門后臺編程語言,...
    dptms閱讀 1,924評論 1 15
  • 一、Python簡介和環境搭建以及pip的安裝 4課時實驗課主要內容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 5,803評論 0 10
  • 11、談談mvc的認識。由模型、視圖、控制器完成的應用程序,由模型發出要實現的功能到控制器,控制器接收組織功能傳遞...
    像敏銳的狗閱讀 398評論 0 2
  • 不善良的人那么多,你受點傷害再正常不過。 只希望,不管你所處的環境如何糟糕 都不要 輕易放棄自己 畢竟漫長的人生,...
    水墨清歡閱讀 153評論 0 0