PHP 擁用八種原始資料類型,理解其分類、記憶體表現與判斷函數差異,是寫出健壯代碼的基礎。本文系統梳理類型體系,並針對 gettype()、is_* 系列、=== 嚴格比較等常見坑點給出最佳實踐。
| 分類 | 類型 | 關鍵字 | 範例 |
|---|---|---|---|
| 標量類型 | 字串 | string | 'hello', "world", `raw` |
| 整數 | int / integer | 42, -7, 0x1F, 0b1010 | |
| 浮點數 | float / double | 3.14, 1.2e3, .5 | |
| 布林 | bool / boolean | true, false | |
| 複合類型 | 陣列 | array | [1,2,3], ['k'=>'v'] |
| 物件 | object | new StdClass(), new User() | |
| 特殊類型 | 資源 | resource | fopen(), curl_init() |
| 空值 | null | null, 未定義變數 |
$v = 3.14;
echo gettype($v); // 'double' (注意:float 返回 'double')
is_int($v) // 整數
is_float($v) // 浮點數(含 double)
is_string($v) // 字串
is_bool($v) // 布林
is_array($v) // 陣列
is_object($v) // 物件
is_resource($v) // 資源
is_null($v) // null
is_scalar($v) // 標量(int/float/string/bool)
is_numeric($v) // 數值字串或數字
bool,適合 if 判斷;gettype() === 'type';is_numeric() 會將 '123'、'3.14' 視為 true。var_dump($v); // 輸出類型、長度、值,支援遞歸、引用標記
0 == '' // true (類型轉換)
0 === '' // false (類型不同)
0 == null // true
0 === null // false
false == '' // true
false === '' // false
// 實用等價函數
function strict_eq($a, $b): bool {
return $a === $b; // 內建 === 已包含值+類型比較
}
| 值 | gettype() | empty() | (bool) | === false | === null | === '' |
|---|---|---|---|---|---|---|
| 0 | integer | true | false | false | false | false |
| '0' | string | true | false | false | false | false |
| '' | string | true | false | false | false | true |
| null | NULL | true | false | false | true | false |
| false | boolean | true | false | true | false | false |
| [] | array | true | false | false | false | false |
is_*,不要用 gettype() == 'type';===,避免隱式轉換驚喜;isset(),檢查 null 用 is_null() 或 === null;(int)、(float) 強制轉型;json_encode(JSON_PRESERVE_ZERO_FRACTION) 保持浮點數精度。掌握類型系統細節,能消除 80% 以上非業務邏輯 Bug。