PHP 提供一組 is_* 開頭的內建函式,用於檢測變數是否屬於特定型別。這些函式回傳 bool,是條件判斷、資料驗證、除錯輸出的基礎工具。
| 函式 | 檢測型別 | 備註 |
|---|---|---|
is_array() | 陣列 | 包含索引陣列與關聯陣列 |
is_bool() | 布林值 | 僅 true/false |
is_callable() | 可呼叫型別 | 函式名字串、閉包、實作 __invoke 的物件、陣列 [$obj, 'method'] |
is_double() / is_float() / is_real() | 浮點數 | 三個函式別名,is_real 含整數與浮點數 |
is_int() / is_integer() / is_long() | 整數 | 三個函式別名 |
is_null() | Null | 僅 null |
is_numeric() | 數值或數值字串 | "123", "12.3", "+0xFF" 皆回傳 true |
is_object() | 物件 | 任何類別實例 |
is_resource() | 資源型別 | 如 fopen()、curl_init()、mysqli_connect() 回傳值 |
is_scalar() | 純量型別 | int, float, string, bool (不含陣列、物件、資源、null) |
is_string() | 字串 | |
is_iterable() | 可迭代 | PHP 7.1+,陣列或實作 Traversable |
is_countable() | 可計數 | PHP 7.3+,陣列或實作 Countable |
<?php
$sum = 6;
var_dump(is_string($sum)); // bool(false)
var_dump(is_int($sum)); // bool(true)
var_dump(is_numeric("123")); // bool(true)
var_dump(is_numeric("12.3abc")); // bool(false)
// 實用封裝:取得型別名稱
function getTypeName($var) {
if (is_null($var)) return 'null';
if (is_bool($var)) return 'bool';
if (is_int($var)) return 'int';
if (is_float($var)) return 'float';
if (is_string($var)) return 'string';
if (is_array($var)) return 'array';
if (is_object($var)) return 'object (' . get_class($var) . ')';
if (is_resource($var)) return 'resource (' . get_resource_type($var) . ')';
return 'unknown';
}
echo getTypeName([]); // array
echo getTypeName(new DateTime()); // object (DateTime)
gettype() vs get_debug_type() (PHP 8+)gettype($var):回傳字串 "integer", "double", "array"... 舊版相容。get_debug_type($var) (PHP 8+):回傳更符合現代型別宣告的名稱,如 "int", "float", "array", "MyClass", "Closure",適合除錯訊息。is_numeric() 會回傳 true 給十六進位字串:is_numeric("0xFF") === true,但 is_int("0xFF") === false。is_float(NAN) === true,is_finite() (PHP 7.2+) 可區分有限數值。ArrayAccess 的物件 is_array() === false,但可直接 foreach 遍歷。