可轉換的目標類型
| 類型關鍵字 | 說明 |
| (int) / (integer) | 整型 |
| (float) / (double) / (real) | 浮點型 |
| (string) | 字符串 |
| (bool) / (boolean) | 布爾型 |
| (array) | 數組 |
| (object) | 對象 |
方式一:強制類型轉換運算符(推薦,簡潔)
在變量前加上目標類型關鍵字(括號包裹):
<?php
$num1 = 3.14;
$num2 = (int)$num1;
var_dump($num1); // float(3.14)
var_dump($num2); // int(3)
$str = "123abc";
$int = (int)$str; // 123
$float = (float)$str; // 123
$bool = (bool)$str; // true (非空字符串)
?>
方式二:專用轉換函數
| 函數 | 等價轉換 | 說明 |
| intval($var) | (int)$var | 轉整型,支援進制參數 |
| floatval($var) | (float)$var | 轉浮點型 |
| strval($var) | (string)$var | 轉字符串 |
<?php
$str = "123.9abc";
$int = intval($str); // 123
$float = floatval($str); // 123.9
$str2 = strval($float); // "123.9"
?>
方式三:通用 settype() 函數
直接修改原變量,返回 bool 表示是否成功:
<?php
$num = 12.8;
$ok = settype($num, "int");
var_dump($ok); // bool(true)
var_dump($num); // int(12)
// 可用類型字符串: "int", "integer", "float", "double", "string", "array", "object", "bool", "boolean"
?>
三種方式對比
| 特性 | 強制轉換 | 專用函數 | settype() |
| 語法風格 | 運算符 | 函數調用 | 函數調用 |
| 返回值 | 轉換後的值 | 轉換後的值 | bool(成功與否) |
| 原變量 | 不變 | 不變 | 被修改 |
| 適用場景 | 臨時轉換、表達式中 | 語義明確、需進制處理 | 原地修改、動態類型名 |
| 效能 | 最快 | 略慢(函數調用) | 略慢 |
常見陷阱
(int)"abc" → 0(非數字開頭字符串轉整為 0)
(bool)[] → false(空數組),(bool)[1] → true
settype($arr, "int") 會銷毀數組結構,慎用
- JSON 解碼後的數字可能是
float,存入 MySQL INT 欄位前建議 intval()
最佳實踐
- 優先使用 強制類型轉換運算符,代碼簡潔高效
- 需進制轉換(如十六進制字符串轉整)用
intval($str, 16)
- 動態類型名(如配置驅動)用
settype() 或 call_user_func('intval', $var)
- 嚴格類型模式(
declare(strict_types=1))下更需顯式轉換