萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 網路程式設計 >> PHP 程式設計

PHP isset() 與 array_key_exists() 差異深度解析

核心差異一目了然

特性isset()array_key_exists()
檢查目標變數是否存在且非 null陣列鍵名是否存在(值可為 null)
回傳值boolbool
適用對象任意變數、陣列元素、物件屬性僅陣列
效能語言結構,極快函式呼叫,稍慢
null 值處理視為不存在 → false鍵存在 → true

程式碼實證

<?php
$arr = ['key1' => 'value', 'key2' => null, 'key3' => ''];

// key1:存在且非 null
var_dump(isset($arr['key1']));           // true
var_dump(array_key_exists('key1', $arr)); // true

// key2:存在但值為 null
var_dump(isset($arr['key2']));           // false  ← 關鍵差異
var_dump(array_key_exists('key2', $arr)); // true

// key3:存在且為空字串
var_dump(isset($arr['key3']));           // true
var_dump(array_key_exists('key3', $arr)); // true

// key4:完全不存在
var_dump(isset($arr['key4']));           // false
var_dump(array_key_exists('key4', $arr)); // false
?>

實務決策指南

何時用 isset()?

  • 檢查變數是否已初始化
  • 確認陣列元素「有值且非 null」
  • 多變數同時檢查:isset($a, $b, $c)(全部符合才回 true)
  • 效能敏感的熱門路徑

何時用 array_key_exists()?

  • 需區分「鍵不存在」vs「鍵存在但值為 null」
  • 實作 Nullable 型別邏輯
  • 陣列鍵名可能為 null、false、0、'' 等 falsy 值

進階技巧

結合使用:先檢鍵存在,再取值

function getArrayValue(array $arr, string $key, $default = null) {
    return array_key_exists($key, $arr) ? $arr[$key] : $default;
}

物件屬性檢查

class Demo {
    public $prop = null;
}
$obj = new Demo();
isset($obj->prop);           // false
property_exists($obj, 'prop'); // true  ← 物件用 property_exists()

效能微基準測試

$arr = range(1, 10000);
$start = microtime(true);
for ($i = 0; $i < 100000; $i++) isset($arr[5000]);
echo 'isset: ' . (microtime(true) - $start) . "s\n";

$start = microtime(true);
for ($i = 0; $i < 100000; $i++) array_key_exists(5000, $arr);
echo 'array_key_exists: ' . (microtime(true) - $start) . "s\n";
// 典型結果:isset 約快 3-5 倍

總結

isset() 是檢查「有沒有值」的高效工具;array_key_exists() 是檢查「有沒有這個鍵」的精確工具。根據業務語義選擇正確的函式,能避免隱性 Bug 並提升程式碼可讀性。

copyright © 萬盛學電腦網 all rights reserved