首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

解析 PHP 中 empty、is_null 與 isset 的差異測試

     編輯:PHP 綜合知識

PHP 三大判空函數行為對比表

PHP 提供 empty()、is_null()、isset() 三個常用判空函數,但其行為差異常導致邏輯錯誤。本文通過實測數據釐清適用場景。

測試代碼

<?php
$a;          // 未定義
$b = false;  // 布爾偽
$c = '';     // 空字串
$d = 0;      // 整數零
$e = null;   // 空值
$f = array(); // 空陣列

測試結果總覽

變量值empty()is_null()isset()
$a未定義truetruefalse
$bfalsetruefalsetrue
$c''truefalsetrue
$d0truefalsetrue
$enulltruetruefalse
$farray()truefalsetrue

核心差異解析

empty() —— 通用「假值」檢測

  • 判定所有「空/假」值為 true:""、0、0.0、"0"、null、false、array()、未定義變量
  • 適用場景:表單驗證、配檢查變量「是否有效內容」
  • 注意:empty('0') === true,可能誤判字串「0」

is_null() —— 專精 null 檢測

  • 僅當值嚴格為 null 或變量未定義時返回 true
  • false、0、''、array() 均返回 false
  • 適用場景:區分「未設置」與「設置為空值」

isset() —— 變量存在性檢測

  • 變量存在且非 null 返回 true
  • false、0、''、array() 均返回 true
  • 未定義或 null 返回 false
  • 適用場景:檢查陣列鍵是否存在、變量是否已初始化

最佳實踐建議

需求推薦函數範例
檢查變量有實際內容(非假值)!empty()if (!empty($_POST['name']))
嚴格判斷是否為 nullis_null()if (is_null($var))
檢查變量/陣列鍵是否已定義isset()if (isset($arr['key']))
區分「未定義」vs「定義為 null」isset() + is_null()isset($v) && is_null($v)

結論:empty() 適合業務邏輯的「非空驗證」;is_null() 與 isset() 針對變量狀態檢測,二者互補。選對函數,避免邏輯漏洞。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved