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

PHP 判斷變數型別:gettype() 與 is_* 函數族群完整解析

     編輯:PHP 相關知識

核心函數:gettype()

string gettype(mixed $var) 回傳變數型別字串,可能值:"boolean"、"integer"、"double"(歷史原因實為 float)、"string"、"array"、"object"、"resource"、"NULL"、"unknown type"。

官方不建議直接用 gettype() 做型別判斷的原因

  • 回傳字串在未來版本可能變動
  • 涉及字串比較,效能較慢
  • 推薦使用 is_* 函數族群,語意明確且效能更好

推薦寫法:自訂 myGetType() 封裝 is_* 函數

<?php
function myGetType($var) {
    if (is_array($var))       return "array";
    if (is_bool($var))        return "boolean";
    if (is_float($var))       return "float";
    if (is_int($var))         return "integer";
    if (is_null($var))        return "NULL";
    if (is_numeric($var))     return "numeric";
    if (is_object($var))      return "object";
    if (is_resource($var))    return "resource";
    if (is_string($var))      return "string";
    return "unknown type";
}
?>

is_* 函數族群完整速查表

函數檢測目標備註
is_array()陣列
is_bool()布林值
is_float() / is_double() / is_real()浮點數三者同義
is_int() / is_integer() / is_long()整數三者同義
is_string()字串
is_object()物件
is_null()NULL 值
is_numeric()數值或數值字串如 "123"、"1.23" 也回傳 true
is_scalar()純量類型int/float/string/bool
is_callable()可呼叫結構函數、閉包、實作 __invoke 的物件
is_iterable()可迭代PHP 7.1+,陣列或實作 Traversable
is_resource()資源型別如資料庫連線、檔案控制代碼

進階判斷技巧

物件型別精確判斷

<?php
// 取得類別名稱
if (is_object($var)) {
    echo get_class($var);  // 回傳類別名稱
}

// 型別提示與 instanceof
if ($var instanceof SomeClass) { ... }
?>

資源型別識別

<?php
$fp = fopen("test.txt", "r");
var_dump(get_resource_type($fp)); // "stream"
?>

效能與最佳實務

  • 型別檢查優先用 is_* 函數,避免 gettype() === 'string' 這類字串比較
  • PHP 8.0+ 可搭配 get_debug_type() 取得更精確的型別描述(適用除錯)
  • 嚴格模式 (declare(strict_types=1)) 下型別檢查更嚴謹
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved