PHP 是弱類型語言,變量類型由上下文自動推斷,支持 8 種基本類型:
int、float、string、boolarray、objectresource、null運算符會根據操作數自動轉換類型:
<?php
// 算術運算:任一操作數為 float,結果為 float
var_dump(10 + 3.14); // float(13.14)
var_dump(10 + "3.14"); // float(13.14) 字符串轉數字
var_dump(10 + "3abc"); // int(13) 字符串開頭數字部分
var_dump(10 + "abc"); // int(10) 無數字開頭視為 0
// 字符串連接:. 操作數自動轉字符串
var_dump(10 . 20); // string(4) "1020"
var_dump("age: " . 25); // string(6) "age: 25"
// 邏輯判斷:自動轉 bool
var_dump((bool)0); // false
var_dump((bool)""); // false
var_dump((bool)"0"); // false 注意:"0" 為 false
var_dump((bool)"false"); // true 非空字符串為 true
var_dump((bool)[]); // false 空數組為 false
?>
語法:(目標類型)$variable,允許類型:
| 類型關鍵字 | 別名 | 目標類型 |
|---|---|---|
(int) | (integer) | 整型 |
(float) | (double), (real) | 浮點型 |
(string) | 字符串 | |
(bool) | (boolean) | 布爾型 |
(array) | 數組 | |
(object) | 對象 | |
(unset) | NULL (PHP 5+) | |
(binary) | 二進制字符串 (PHP 6/7+ b"" 語法) |
<?php
$val = "3.14abc";
var_dump((int)$val); // int(3)
var_dump((float)$val); // float(3.14)
var_dump((bool)$val); // bool(true) 非空字符串
var_dump((array)$val); // array(1) { [0]=> string(7) "3.14abc" }
var_dump((object)$val); // object(stdClass)#1 { ["scalar"]=> string(7) "3.14abc" }
// 二進制字符串 (PHP 5.2.1+)
$bin = (binary) $str; // 等同於 b"binary string"
?>
| 函數 | 說明 | 等價寫法 |
|---|---|---|
intval($var, $base=10) | 轉整型,支持進制(2-36) | (int)$var |
floatval($var) | 轉浮點型 | (float)$var |
strval($var) | 轉字符串 | (string)$var |
boolval($var) | 轉布爾型 (PHP 5.5+) | (bool)$var |
settype($var, $type) | **就地修改**變量類型,返回 bool | 無直接等價 |
<?php
$str = "123.9abc";
$int = intval($str); // 123
$float = floatval($str); // 123.9
$str2 = strval($float); // "123.9"
$num = 12.8;
$ok = settype($num, "int"); // $num 變為 12, $ok = true
var_dump($num, $ok);
?>
判斷類型請使用 is_* 系列,**不要用 gettype() 比較**:
<?php
$var = 123;
is_int($var); // true
is_float($var); // false
is_numeric($var); // true (純數字字符串也返回 true)
is_string($var); // false
is_array($var); // false
is_bool($var); // false
is_null($var); // false
is_object($var); // false
// gettype() 返回規範名稱
gettype(3.14); // "double" 歷史原因 float 返回 double
gettype([]); // "array"
gettype(null); // "NULL"
?>
"0"、"false" 經 (bool) 為 false,需用 filter_var($v, FILTER_VALIDATE_BOOLEAN) 正確解析。abs($a-$b) < EPSILON 或 BCMath 高精度函數。echo $arr 觸發 Notice 並輸出 "Array",應用 implode()、json_encode()、var_export()。resource 無法直接轉換,需用對應函數釋放或獲取信息(如 stream_get_meta_data())。declare(strict_types=1); 強制參數類型,減少隱式轉換 Bug。理解 PHP 類型轉換規則,善用強制轉換與檢測函數,能編寫更健壯、可預測的代碼。