PHP 資料型別總覽
PHP 是動態型別語言,變數型別由賦值決定,執行期可自動轉換。共分為三大類八種型別:
四種純量型別
- integer:整數(如
123, -10, 0x1A)
- float(又稱
double):浮點數(如 3.14, 1.2e3)
- string:字串(單引號、雙引號、Heredoc、Nowdoc)
- boolean:布林值(
true/false)
兩種複合型別
- array:陣列(有序映射,支援數字/字串鍵)
- object:物件(類別實例)
兩種特殊型別
- resource:資源(如資料庫連線、檔案控制代碼)
- NULL:空值(未賦值、
unset()、指派 null)
型別檢測與判斷
gettype() 取得型別名稱
<?php
$varBool = true;
$varStr = "foo";
$varInt = 12;
echo gettype($varBool); // boolean
echo gettype($varStr); // string
echo gettype($varInt); // integer
// 注意:float 會回傳 "double"
echo gettype(1.23); // double
?>
is_* 系列函數(建議用於邏輯判斷)
<?php
$var = 12;
if (is_int($var)) {
$var += 4;
}
echo $var; // 16
// 常用:is_bool, is_int, is_float, is_string, is_array, is_object, is_null, is_resource, is_numeric
?>
var_dump() 同時檢視值與型別
<?php
$arr = [1, 'a' => 2];
var_dump($arr);
// 輸出:array(2) { [0]=> int(1) ["a"]=> int(2) }
?>
變數與常數
- 變數以
$ 開頭,區分大小寫($var ≠ $Var)
- 常數用
define() 定義,慣例全大寫,無 $ 符號,僅能儲存純量值
- 預先定義常數:
__LINE__, __FILE__, PHP_VERSION, PHP_OS 等
型別轉換與轉型
自動轉換(Type Juggling)
<?php
$foo = "0"; // string
$foo++; // "1" (string)
$foo += 1; // 2 (int)
$foo = $foo + 1.3; // 3.3 (float)
$foo = 5 + "10 Little Piggies"; // 15 (int) - 字串開頭數字參與運算
$foo = 5 + "10 Small Pigs"; // 15 (int)
?>
強制轉型
<?php
$foo = 10;
$bar = (double) $foo; // float
$arr = (array) $foo; // array(0 => 10)
$obj = (object) $foo; // object(stdClass)#1 { ["scalar"]=> int(10) }
// 等價寫法
$foo = (int) $bar;
$foo = ( int ) $bar; // 允許空白
?>
settype() 永久改變變數型別
<?php
$val = "123";
settype($val, "integer");
var_dump($val); // int(123)
?>
字串轉數字規則
- 包含
.、e、E → 視為 float
- 否則視為 int
- 從字串開頭解析數字,非數字開頭為 0
<?php
1 + "10.5" // 11.5 (float)
1 + "-1.3e3" // -1299 (float)
1 + "bob-1.3e3" // 1 (int) - 非數字開頭
1 + "10 Pigs" // 11 (int)
?>
運算子完整速查表
算術運算子
| 符號 | 名稱 | 範例 | 結果 |
| + | 加法 | $x=2; $x+2 | 4 |
| - | 減法 | 5-$x | 3 |
| * | 乘法 | $x*5 | 20 |
| / | 除法 | 15/5 | 3 |
| % | 取模 | 5%2 | 1 |
| ++ | 遞增 | $x=5; $x++ | $x=6 |
| -- | 遞減 | $x=5; $x-- | $x=4 |
指派運算子
| 符號 | 等同於 |
| = | $x=$y |
| += | $x=$x+$y |
| -= | $x=$x-$y |
| *= | $x=$x*$y |
| /= | $x=$x/$y |
| %= | $x=$x%$y |
| .= | $x=$x.$y |
比較運算子
| 符號 | 名稱 | 範例 | 結果 |
| == | 等值 | 5==8 | false |
| === | 全等(值+型別) | 5==="5" | false |
| != | 不等值 | 5!=8 | true |
| !== | 不全等 | 5!=="5" | true |
| > | 大於 | 5>8 | false |
| < | 小於 | 5<8 | true |
| >= | 大於等於 | 5>=8 | false |
| <= | 小於等於 | 5<=8 | true |
邏輯運算子
| 符號 | 名稱 | 範例 | 結果 |
| && | AND | $x=6;$y=3; ($x<10 && $y>1) | true |
| || | OR | $x=6;$y=3; ($x==5 || $y==5) | false |
| ! | NOT | $x=6;$y=3; !($x==$y) | true |
| xor | XOR | true xor false | true |
其他重要運算子
- 字串串接:
.(點號),.= 指派串接
- 三元運算子:
(expr1) ? expr2 : expr3,複雜條件建議加括號:($x >= 0) ? $x : -$x
- 錯誤抑制:
@ 前綴(慎用)
- 執行運算子:反引號
`cmd` 等同 shell_exec()
- 陣列運算子:
+ 聯合、== === != !==
- 型別運算子:
instanceof
常見陷阱與最佳實踐
- === 優於 ==:避免自動型別轉換導致邏輯錯誤(如
"0" == false 為 true)
- 善用 is_* 函數:比
gettype() 更語意化、效能更好
- 字串轉數字:明確使用
(int)、(float) 或 intval()、floatval()
- 常數命名:全大寫 + 底線分隔(
MAX_SIZE)
- 資源型別:不可直接操作,需透過對應函數傳遞
熟練掌握型別系統與運算子,是寫出健壯 PHP 程式的基石。