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

PHP 資料類型完整圖譜:八大原始類型、類型判斷與常見陷阱

     編輯:PHP 相關知識

PHP 擁用八種原始資料類型,理解其分類、記憶體表現與判斷函數差異,是寫出健壯代碼的基礎。本文系統梳理類型體系,並針對 gettype()、is_* 系列、=== 嚴格比較等常見坑點給出最佳實踐。

八大原始類型分類

分類類型關鍵字範例
標量類型字串string'hello', "world", `raw`
整數int / integer42, -7, 0x1F, 0b1010
浮點數float / double3.14, 1.2e3, .5
布林bool / booleantrue, false
複合類型陣列array[1,2,3], ['k'=>'v']
物件objectnew StdClass(), new User()
特殊類型資源resourcefopen(), curl_init()
空值nullnull, 未定義變數

類型檢測函數對比

1. gettype() —— 獲取類型字串

$v = 3.14;
echo gettype($v); // 'double' (注意:float 返回 'double')
  • 返回值為小寫字串:'boolean', 'integer', 'double', 'string', 'array', 'object', 'resource', 'NULL', 'unknown type';
  • 歷史遺留:float 類型返回 'double' 而非 'float'。

2. is_* 系列 —— 邏輯判斷首選

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。

3. var_dump() —— 調試利器

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=== ''
0integertruefalsefalsefalsefalse
'0'stringtruefalsefalsefalsefalse
''stringtruefalsefalsefalsetrue
nullNULLtruefalsefalsetruefalse
falsebooleantruefalsetruefalsefalse
[]arraytruefalsefalsefalsefalse

最佳實踐建議

  1. 判斷類型用 is_*,不要用 gettype() == 'type';
  2. 比較值用 ===,避免隱式轉換驚喜;
  3. 檢查變數存在用 isset(),檢查 null 用 is_null() 或 === null;
  4. 資料庫交互:PDO::FETCH_ASSOC 返回字串型數字,入庫前用 (int)、(float) 強制轉型;
  5. API 輸出:使用 json_encode(JSON_PRESERVE_ZERO_FRACTION) 保持浮點數精度。

掌握類型系統細節,能消除 80% 以上非業務邏輯 Bug。

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