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

PHP isset() 與 empty() 差異完全圖解:判斷變量狀態的正確姿勢

     編輯:PHP 綜合知識

isset() 與 empty() 是 PHP 最常用的變量狀態檢測函數,但語義差異導致大量邏輯 Bug。本文用真值表、源碼邏輯、實戰場景徹底釐清。

核心定義

  • isset():變量**已聲明** 且 **不等於 null** → true
  • empty():變量**不存在** 或 **等於 false**(空值) → true

完整真值表

變量狀態代碼示例isset()empty()備註
未定義$a; (無此行)falsetrueempty 不觸發警告
null$a = null;falsetrue
空字符串$a = '';truetrue
整數 0$a = 0;truetrue
浮點 0.0$a = 0.0;truetrue
字符串 "0"$a = '0';truetrue字符串 "0" 視為假值
布爾 false$a = false;truetrue
空數組$a = [];truetrue
非空字符串$a = 'foo';truefalse
非零數字$a = 1;truefalse
非空數組$a = [1];truefalse
對象$a = new StdClass();truefalse
資源$a = fopen(...);truefalse

底層邏輯等價代碼

function my_isset($var) {
    return array_key_exists('var', get_defined_vars()) && $var !== null;
    // 實際為 Zend VM 專用指令 ISSET_ISEMPTY_VAR,非用戶函數可模擬
}

function my_empty($var) {
    // 等價於 !$var,但不觸發 "Undefined variable" 警告
    return !isset($var) || !$var;
}

實戰選擇指南

場景推薦理由
檢測 $_GET/$_POST 是否提交isset($_POST['key'])區分「未提交」與「提交空值」
檢測配置項是否啟用!empty($config['flag'])未配置、false、0、'' 視同關閉
檢測數組鍵是否存在array_key_exists('key', $arr)isset 對 null 值鍵返回 false
檢測對象屬性property_exists($obj, 'prop')區分未聲明、聲明為 null、魔術 __get
鏈式安全取值$a?->b?->c ?? 'default' (PHP 8)Nullsafe 操作符 + 空合並運算符

常見陷阱

  • empty($obj->prop) 會觸發 __get('prop'),若返回 null 則 true,可能非預期
  • isset($arr['key']) 對 $arr['key'] = null 返回 false,用 array_key_exists 區分
  • empty() 不接受表達式:empty(trim($str)) 報錯,需用中間變量
原文代碼示例簡潔準確:isset($var) 未定義 false、定義空串 true;empty($var) 空串 true、'111' false。掌握真值表即可無腦套用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved