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

PHP 數據類型判斷函數完整速查表

     編輯:PHP 綜合知識

類型判斷函數速查:is_* 系列與常見誤區

PHP 提供一組 is_* 函數用於運行時類型檢查,掌握它們的適用範圍與邊界條件,能避免「以為是整數實則是字串」等隱性 Bug。

核心類型判斷函數列表

函數判斷目標類型返回 true 示例返回 false 示例
is_bool()布林值true, false1, "true", 0
is_int() / is_integer()整數42, -5, 0"42", 3.14, true
is_float() / is_double() / is_real()浮點數3.14, -0.5, 1.0"3.14", 42
is_string()字串"hello", "", "123"123, true, null
is_array()陣列[1,2], ['a'=>1]new ArrayObject, "[]"
is_object()對象new StdClass, new MyClass[1,2], "obj"
is_numeric()數字或純數字字串42, -3.14, "42", "3.14", "0xFF""42px", "hello", []
is_scalar()標量類型 (int/float/string/bool)1, 1.0, "a", true[1], new Obj, null
is_callable()可調用結構'strlen', [$obj,'method'], fn()=>1'not_exist', [1,2]
is_iterable()可迭代 (PHP 7.1+)[1,2], new Generator, new ArrayIterator1, "str", new StdClass
is_null()null 值null0, "", false, []
is_resource()資源類型fopen(), curl_init()null, 1, "res"

重點辨析:is_numeric() vs is_int()

$vals = [123, "123", 12.3, "12.3", "123abc", "0xFF"];
foreach ($vals as $v) {
    echo var_export($v, true) . " => ";
    echo "is_int: " . (is_int($v) ? 'T' : 'F') . " ";
    echo "is_numeric: " . (is_numeric($v) ? 'T' : 'F') . "\n";
}
/* 輸出
123        => is_int: T is_numeric: T
'123'      => is_int: F is_numeric: T   ← 字串數字通過 is_numeric
12.3       => is_int: F is_numeric: T
'12.3'     => is_int: F is_numeric: T
'123abc'   => is_int: F is_numeric: F
'0xFF'     => is_int: F is_numeric: T   ← 十六進制字串也算 numeric
*/

實務判斷模式

// 1. 嚴格整數檢查(拒絕字串數字)
function isStrictInt($v) { return is_int($v); }

// 2. 寬鬆整數檢查(接受字串數字、浮點整數)
function isLooseInt($v) { return is_numeric($v) && (string)(int)$v === (string)$v; }

// 3. 類型斷言風格(PHP 8.0+)
function process(int|string $id): void { /* ... */ }

// 4. 避免隱式轉型陷阱
if ($_POST['age'] === '25') { /* 字串比較 */ }
if ((int)$_POST['age'] === 25) { /* 強制轉型後比較 */ }

常見陷阱提醒

  • is_integer() 是 is_int() 別名,功能完全相同。
  • is_numeric() 對十六進制 (0xFF)、二進制 (0b101)、科學記數法 (1e3) 字串均返回 true。
  • ctype_digit() 僅檢查字串是否全為數字字符,不接受 整數變量,需先 (string)$v。
  • 資源類型 (is_resource()) 在 PHP 8.0+ 部分遷移為對象 (如 GD 圖片、Curl handle),舊代碼需注意。

善用 gettype()、get_debug_type() (PHP 8.0+) 進行調試輸出,配合嚴格類型聲明 (declare(strict_types=1)),能在開發期攔截絕大多數類型不匹配問題。

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