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

PHP 變量判斷函數大比拼:isset vs empty vs is_null vs unset 核心差異詳解

     編輯:PHP 綜合知識

四大函數職責速覽

函數用途返回類型副作用
isset()判斷變量是否已聲明且非 nullbool無
empty()判斷變量是否為「空值」bool無
is_null()判斷變量是否嚴格等於 nullbool無
unset()銷毀變量void變量消失

核心差異:empty() 的「空值」定義

以下值均被視為「空」 → empty() 返回 true:

  • ""(空字符串)
  • 0(整數零)
  • "0"(字符串零)
  • 0.0(浮點零)
  • false(布爾假)
  • [] / array()(空數組)
  • null
  • 未聲明的變量
  • 未賦值的對象屬性

真值表:所有常見情況一覽

變量狀態empty()is_null()isset()
$a = ""truefalsetrue
$a = nulltruetruefalse
unset $atruetruefalse
$a = []truefalsetrue
$a = falsetruefalsetrue
$a = 15falsefalsetrue
$a = 1falsefalsetrue
$a = 0truefalsetrue
$a = "0"truefalsetrue
$a = "true"falsefalsetrue
$a = "false"falsefalsetrue

關鍵結論

  1. isset() 與 is_null() 互為反面(針對已聲明變量)
  2. empty() 覆蓋面最廣:只要是「假值」就返回 true
  3. unset() 徹底銷毀,之後 isset/empty/is_null 均視為「不存在」

實戰最佳實踐

場景 1:檢查 $_GET/$_POST 是否提交

<?php
// ✅ 推薦:isset 判斷鍵是否存在
if (isset($_GET['id'])) { $id = (int)$_GET['id']; }

// ❌ 避免:empty 會誤判 id=0 為未提交
if (!empty($_GET['id'])) { ... } // id=0 時不進入!
?>

場景 2:判斷配置項是否設置(允許 false/0/"")

<?php
// ✅ 推薦:isset + 非 null 判斷
if (isset($config['debug']) && $config['debug'] !== null) { ... }

// ❌ empty 會誤判 false/0 為「未設置」
?>

場景 3:安全讀取可能不存在的數組鍵

<?php
// PHP 7+ 零合併運算符(最優雅)
$value = $arr['key'] ?? 'default';

// 兼容老版本
$value = isset($arr['key']) ? $arr['key'] : 'default';
?>

場景 4:區分「未設置」與「設置為 null」

<?php
// 只有 array_key_exists 能區分
$arr = ['key' => null];

isset($arr['key']);        // false
array_key_exists('key', $arr); // true
?>

避坑指南

  • empty($obj->prop) 會觸發 __get() 魔術方法
  • isset($arr['key']) 不會觸發數組言取錯誤,極其安全
  • is_null() 參數必須是變量,is_null(func()) 會報錯(PHP 7.2+ 棄用)
  • 全局變量用 isset($GLOBALS['var']) 而非 isset($var)

記住:isset 檢存在,empty 檢假值,is_null 檢純 null,unset 幹掉它 —— 選對工具,少寫 Bug。

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