變量引用機制
<?php
$one = "test";
$two = &$one; // 引用賦值:兩個變量指向同一 zval 容器
$two = "changed";
echo $one; // "changed" —— 原變量也被修改
// 取消引用
unset($two); // $one 保持不變,只是解除綁定
動態變量(變量的變量)
<?php
$one = "######";
$two = "one";
$three = "two";
echo $three; // "two"
echo $$three; // "one" ($two 的值)
echo $$$three; // "######" ($one 的值)
// 實用場景:從配置加載變量
$config = ['db_host' => 'localhost', 'db_port' => 3306];
foreach ($config as $key => $value) {
$$key = $value; // 創建 $db_host, $db_port
}
PHP 八大數據類型系統
| 分類 | 類型 | 關鍵字 | 說明 |
| 標量類型 (4種) | 整型 | int / integer | 64位系統範圍:±9.22×10¹⁸ |
| 布爾型 | bool / boolean | true/false |
| 浮點型 | float / double / real | IEEE 754 雙精度,約 15-17 位有效數字 |
| 字符串 | string | 二進制安全,無長度限制 |
| 復合類型 (2種) | 數組 | array | 有序映射,鍵可為 int/string |
| 對象 | object | 類實例 |
| 特殊類型 (2種) | 資源 | resource | 外部資源句柄(DB連接、文件指針等) |
| 空值 | null | 無值,未初始化/unset/null賦值 |
整數字面量語法
<?php
$dec = 10; // 十進制
$oct = 045; // 八進制 (0 開頭)
$hex = 0xFF; // 十六進制 (0x 開頭)
$bin = 0b1010; // 二進制 (0b 開頭, PHP 5.4+)
// 數字分隔符 (PHP 7.4+)
$big = 1_000_000_000; // 10億,增強可讀性
浮點數字面量
<?php
$float1 = 3.14;
$float2 = 3.14E+5; // 科學計數法:3.14 × 10⁵ = 314000
$float3 = 3.14E-5; // 3.14 × 10⁻⁵ = 0.0000314
// 特殊值
INF; // 無窮大
NAN; // 非數字
is_finite(), is_infinite(), is_nan()
布爾值轉換規則:以下皆為 false
<?php
$falseValues = [
false, // 布爾假
0, // 整數 0
0.0, // 浮點 0.0
'', // 空字符串
'0', // 字符串 "0" (注意!)
[], // 空數組
null, // 空值
// 簡單XML 對象從空標簽創建
];
// 所有其他值均為 true,包括:
// - 資源類型
// - 對象 (即使屬性全為空)
// - 字符串 "false", " ", "0.0"
// - 數組 [0], [null]
字符串定義四種方式
| 語法 | 解析變量 | 解析轉義 | 適用場景 |
單引號 '...' | 否 | 僅 \' 和 \\ | 純文本、性能敏感、不需解析 |
雙引號 "..." | 是 | 完整支援 (\n \t \\ \" \$ 等) | 需內插變量/轉義字符 |
Heredoc <<<EOT | 是 | 完整支援 | 大段文本、SQL、HTML 模板 |
Nowdoc <<<'EOT' | 否 | 無 (如單引號) | 大段純文本、包含變量名但不想解析 |
Heredoc/Nowdoc 語法規則
<?php
// Heredoc:標識符不加引號,結束標識符必須頂格獨佔一行,前後無空格
$str = <<
字符串最佳實踐
- 優先單引號:無解析開銷,性能微優,語義明確
- 複雜內插用雙引號:
"User {$user->name} logged in at {$time}"
- 大段文本用 Heredoc:SQL、HTML、郵件模板,避免引號嵌套地獄
- Nowdoc 存儲代碼片段:正則、模板、包含 $ 符號的文本
- 字符串連接用
. 而非 ,:echo 'a' . 'b'; (echo 多參數用逗號)
- 避免循環中連接:用數組收集最後
implode()
深入理解變量機制,是寫出高性能、低 Bug PHP 代碼的基石!