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

PHP === 與 == 差異詳解:型別比較的關鍵陷阱與最佳實踐

     編輯:PHP 綜合知識

PHP 提供兩種比較運算子:==(鬆散比較)與 ===(嚴格比較)。混淆兩者是常見 Bug 來源,本文透過實例釐清差異並給出防錯建議。

核心差異

運算子比較行為
==僅比較值,會自動進行型別轉換(Type Juggling)
===同時比較值與型別,不進行轉換

經典陷阱:0 與 false

$result = 0; // 函式回傳 0 表示「找到第 0 筆」或「數量為 0」

if ($result == false) {
    // 這裡會進入!因為 0 == true 為 true
    echo '視為失敗處理'; // 錯誤邏輯
}

if ($result === false) {
    // 只有明確回傳 false 才會進入
    echo '真正失敗'; // 正確邏輯
}

字串與數值比較

$a = '2'; // string
$b = 2;     // int

var_dump($a == $b);  // true  (值相等,型別自動轉換)
var_dump($a === $b); // false (型別不同:string vs int)

常見函式回傳值陷阱

  • strpos():找到位置 0 時回傳 0,未找到回傳 false。必須用 === false 判斷。
  • array_search()、strstr() 等同理。
$pos = strpos('abc', 'a'); // 0
if ($pos == false) { ... }  // 錯:會誤判為未找到
if ($pos === false) { ... } // 正確

最佳實踐建議

  1. 預設使用 ===,除非確定需要型別轉換語意。
  2. 比較函式回傳值(特別是可能為 0 或空字串)時,永遠用 ===。
  3. 配合 isset()、empty()、is_null() 等語意明確的檢查函式。
  4. 開啟 PHP 8+ 的 strict_types=1 宣告,減少隱性轉換。

補充:比較表快查

0 == ''        // true
0 === ''       // false
'0' == 0       // true
'0' === 0      // false
null == false  // true
null === false // false
[] == false    // true
[] === false   // false
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved