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

PHP 布林值轉換規則完整對照表:哪些值被視為 false?

     編輯:PHP 相關知識

核心規則

在 PHP 中,以下 **8 類值** 轉換為 bool 時結果為 false,其餘**全部為 true**:

類別具體值說明
布林值false字面值
整數0零值
浮點數0.0零值(含 -0.0)
字串'' (空字串)、'0'**注意:'0.0', '00', 'false' 皆為 true**
陣列[] (空陣列)無任何元素
物件無屬性物件 (PHP 4)PHP 5+ 物件恆為 true(即使無屬性)
NULLnull、未定義變數包含未 set 的變數
SimpleXML無標籤的 XML 物件simplexml_load_string('<root/>')

常見誤區驗證

<?php
var_dump((bool) "");        // bool(false)
var_dump((bool) 1);         // bool(true)
var_dump((bool) -2);        // bool(true)  負數非零即 true
var_dump((bool) "foo");     // bool(true)
var_dump((bool) 2.3e5);     // bool(true)
var_dump((bool) [12]);      // bool(true)  非空陣列
var_dump((bool) []);        // bool(false) 空陣列
var_dump((bool) "false");   // bool(true)  字串 "false" 非空非 '0'
var_dump((bool) "0.0");     // bool(true)  字串 '0.0' 不在 false 清單
var_dump((bool) "00");      // bool(true)
?>

實務應用場景

1. 條件判斷簡寫

$config = getConfig(); // 可能回傳 null、false、陣列
if ($config) { ... } // 等同於 $config !== null && $config !== false && $config !== []

2. 空值合併運算子 ?? (PHP 7+)

$page = $_GET['page'] ?? 1; // 若 $_GET['page'] 為 null、未設定、空字串?注意:'' 視為 true,不會觸發 ??
// 正確寫法:
$page = (!empty($_GET['page']) && ctype_digit($_GET['page'])) ? (int)$_GET['page'] : 1;

3. empty() vs !$var

值empty()!$var(bool)$var
''truetruefalse
'0'truetruefalse
0truetruefalse
0.0truetruefalse
'0.0'falsefalsetrue
[]truetruefalse
nulltruetruefalse
falsetruetruefalse

結論:empty() 與 !$var 行為一致,皆依據「轉 bool 為 false」判定。但 empty() 不會觸發「未定義變數」Notice,更安全。

最佳實踐建議

  1. 明確比較優於隱性轉換:if ($var === '')、if ($count === 0)、if ($arr === []) 比 if (!$var) 更易讀、更少 Bug。
  2. 資料庫 0/1 欄位:讀取後用 (bool)$row['is_active'] 或 $row['is_active'] == 1,避免字串 '0' 導致誤判。
  3. API 回傳規範:統一使用 true/false(JSON boolean),避免 0/1、'Y'/'N' 造成前端判斷困擾。

結語

掌握 PHP **只有 8 種 false**,其餘皆 true 的鐵律,並養成**明確比較**習慣,能消除 90% 的布林判斷 Bug。

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