理解 PHP 的型別系統與隱含轉換規則,是寫出穩健代碼的基石。本文整理自早期學習筆記,系統梳理布林值判斷、字串定義差異與變數型別動態特性。
PHP 在需要布林值的語境(如 `if`、`while` 條件)會自動將值轉換為 `true` 或 `false`。以下值皆視為 false:
00.0"" 或字串 "0"null[]其餘所有值(含資源、物件、非零數字、非空字串「0」以外)均為 true。
<?php
$values = [0, 0.0, "", "0", null, [], 1, -1, "hello", "0.0", [1]];
foreach ($values as $v) {
var_dump($v, (bool)$v);
}
PHP 字串是位元組序列,單一字元佔 1 位元組(非 Unicode 字碼點)。strlen("中文") 返回 6(UTF-8 編碼下每字 3 位元組),而非 2。處理多語言請使用 `mbstring` 函式。
字串大小僅受限於 `memory_limit` 設定與可用記憶體。
| 語法 | 範例 | 變數解析 | 逸出字元 | 效能 |
|---|---|---|---|---|
| 單引號 | 'hello' | 否 | 僅 \\ \' | 略快 |
| 雙引號 | "hello $name" | 是 | 完整支援 \n \t 等 | 稍慢 |
| Heredoc | <<<EOT ... EOT; | 是 | 同雙引號 | 同雙引號 |
| Nowdoc | <<<'EOT' ... EOT; | 否 | 無解析 | 同單引號 |
<?php
$name = 'World';
echo "Hello $name"; // Hello World
echo "Hello {$name}"; // 同上,建議加大括號界定邊界
echo "Hello ${name}"; // 同上
// 複雜表達式需用 {}
echo "Square: {$name[0]}"; // W
PHP 是動態弱型別語言:變數本身無型別,值才有型別。同一變數可在執行期持有不同型別的值,型別由賦值運算的右運算元決定,並隨著運算子與函式需求自動轉換(型別 Juggling)。
<?php
$var = "10"; // string
$var += 5; // int(15) - 算術運算強制轉 int
$var = $var . "px"; // string(15px) - 串接轉 string
$var = (bool)$var; // bool(true) - 明確轉型
"0" == false // true)。declare(strict_types=1); 強制模式。null、""、0、false,使用 `isset()`、`empty()`、`is_null()` 時明確語意。掌握這三大核心觀念,能避開 80% 以上的 PHP 型別相關 Bug。建議配合官方文件「型別」章節深入研讀,並實際測試各種邊界情況。