本文為系列第二篇,聚焦 PHP 八大資料類型、單雙引號字串行為差異、陣列與物件基礎、資源類型、弱類型特性與強制轉換、以及類型判斷內建函數。
| 類型 | 分類 | 說明與範例 |
|---|---|---|
| Boolean | 純量 | true/false,如 $flag = true; |
| Integer | 純量 | 十進制、八進制(0123)、十六進制(0x1A),平台相關範圍 |
| Float/Double | 純量 | 浮點數,如 $price = 19.99; |
| String | 純量 | 單引號、雙引號、Heredoc、Nowdoc 多種定義方式 |
| Array | 混合 | 鍵值對集合,支援多維,鍵可為整數或字串 |
| Object | 混合 | 類實例,屬性+方法封裝 |
| Resource | 特殊 | 外部資源標識,如 fopen() 返回的檔案句柄 |
| NULL | 特殊 | 無值狀態,變量未賦值或被 unset() |
| 特性 | 單引號 '...' | 雙引號 "..." |
|---|---|---|
| 變量解析 | 不解析,原樣輸出 $var | 解析變量,輸出變量值 |
| 轉義字符 | 僅支援 \\ 和 \' | 支援完整轉義:\n, \t, \$, \" 等 |
| 效能 | 略快(無解析開銷) | 略慢(需解析) |
| 適用場景 | 純靜態字串、包含變量名稱字面量 | 需插入變量值、使用轉義字符 |
<?php
$book = 'PHP指南';
echo "書名:$book"; // 雙引號解析變量
echo '書名:$book'; // 單引號輸出字面量
echo "我的書:'$book'"; // 雙引號外層,單引號內層
echo '書名:"'.$book.'"'; // 單引號外層,雙引號內層
echo "書名:\\$book"; // 轉義 $ 輸出字面量 $book
?>
<?php
// 索引陣列
$books = array('C#指南', '圍城', '朝花夕拾');
// 或
$books[] = 'C#指南';
$books[] = '圍城';
// 關聯陣列
$user = array('name' => '張三', 'age' => 25, 'city' => '台北');
// 多維陣列
$students = array(
array('name' => '李四', 'score' => 90),
array('name' => '王五', 'score' => 85)
);
?>
資源是特殊類型,保存對外部資源的引用(檔案、資料庫連線、圖片句柄等)。
<?php
$fp = fopen('data.txt', 'r'); // $fp 是 resource 類型
var_dump($fp); // resource(1) of type (stream)
?>
PHP 根據上下文自動轉換類型:
<?php
$total = 5; // integer
$count = '25'; // string
$total += $count; // 自動將 $count 轉為 integer,結果 30
?>
在變量前加上目標類型括號:(int), (bool), (array), (object), (string), (float) / (double) / (real)。
<?php
$val = '123abc';
$intVal = (int)$val; // 123
$boolVal = (bool)$val; // true (非空字串)
$arrVal = (array)$val; // array(0 => '123abc')
?>
注意:高精度浮點數轉整數會丟失精度,物件轉整數會產生 Notice 並得 1。
| 函數 | 用途 | 返回值範例 |
|---|---|---|
gettype($var) | 獲取變量類型字串 | 'integer', 'double', 'string', 'array', 'object', 'NULL', 'resource', 'unknown type' |
settype($var, $type) | 將變量就地轉換類型 | 成功返回 true,失敗 false;$type 可為 'integer', 'double', 'string', 'array', 'object' |
is_int(), is_string(), is_array() 等 | 特定類型檢查 | 布林值 |
掌握類型系統是寫出穩健 PHP 代碼的基石,建議養成關鍵位置顯式檢查/轉換類型的習慣。