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

PHP 判斷變數為空的五種方法完整對比

     編輯:PHP 綜合知識

核心概念區分

  • 未初始化:從未賦值的變數
  • NULL:明確賦值 null 或 unset() 後
  • 空值:''、0、0.0、'0'、false、[]、無屬性物件

五大函式/運算子對比表

表達式未初始化NULL''/0/false/[]非空值主要用途
isset($v)falsefalsetruetrue檢查變數是否存在且非 NULL
empty($v)truetruetruefalse檢查是否為「空值」(廣義)
is_null($v)錯誤truefalsefalse嚴格檢查 NULL
$v == null錯誤truetruefalse鬆散比較 NULL/空值
$v === null錯誤truefalsefalse嚴格比較 NULL(同 is_null)

程式碼驗證

<?php
$cases = [
    'uninit'   => null, // 實際無法直接表示,需透過 unset
    'null'     => null,
    'emptyStr' => '',
    'zero'     => 0,
    'false'    => false,
    'emptyArr' => [],
    'nonEmpty' => 'hello',
];

// 模擬未初始化
unset($uninit);
$cases['uninit'] = &$uninit; // 只為演示,實際會報錯

foreach ($cases as $name => $val) {
    echo "=== $name ===\n";
    @$isset = isset($val);      // @ 抑制未初始化錯誤
    @$empty = empty($val);
    @$isnull = is_null($val);
    @$eq = $val == null;
    @$id = $val === null;

    echo "isset: " . ($isset ? 'T' : 'F') . "\n";
    echo "empty: " . ($empty ? 'T' : 'F') . "\n";
    echo "is_null: " . ($isnull ? 'T' : 'F') . "\n";
    echo "== null: " . ($eq ? 'T' : 'F') . "\n";
    echo "=== null: " . ($id ? 'T' : 'F') . "\n";
}

實務選擇指南

場景推薦理由
檢查陣列鍵是否存在isset($arr['key'])不觸發錯誤、效能最好、不視空值為不存在
檢查表單必填欄位empty($_POST['field'])涵蓋未提交、空字串、0 等皆視為未填
檢查變數明確為 null$var === null避免 0/false/'' 干擾、語意明確
函式參數預設值檢查func_num_args() 或 ...$args區分「未傳遞」與「傳遞 null」
資料庫 NULL 欄位判斷is_null($row['col'])明確語意、配合嚴格模式

常見錯誤

<?php
// 錯誤:empty 檢查不存在變數不報錯,但 isset 也不報錯
// 但 empty 會將 '0' 視為空,導致 ID 為 0 的記錄被誤判
if (empty($_GET['id'])) { /* ... */ } // id=0 時進入這裡!

// 正確:isset 檢查存在,再驗證值
if (!isset($_GET['id']) || $_GET['id'] === '') { /* 真正缺失 */ }

// 錯誤:is_null 未初始化會報錯
if (is_null($maybeUndefined)) { /* ... */ }

// 正確:先 isset 或用 nullsafe 運算子 PHP 8+
if ($maybeUndefined === null) { /* ... */ } // 前提是變數存在

PHP 8.1+ 新語法

<?php
// nullsafe 運算子
$value = $obj?->method()?->prop; // 任一環節為 null 直接回傳 null

// 不再支援在未定義變數上使用 is_null/=== null
// 會拋出 Error: Undefined variable
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved