首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 學習筆記:布林值、字串與變數型別核心觀念

     編輯:PHP 相關知識

前言

理解 PHP 的型別系統與隱含轉換規則,是寫出穩健代碼的基石。本文整理自早期學習筆記,系統梳理布林值判斷、字串定義差異與變數型別動態特性。

一、布林值的隱含轉換規則

PHP 在需要布林值的語境(如 `if`、`while` 條件)會自動將值轉換為 `true` 或 `false`。以下值皆視為 false:

  • 整數 0
  • 浮點數 0.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);
}

二、字串深度解析

1. 字串本質

PHP 字串是位元組序列,單一字元佔 1 位元組(非 Unicode 字碼點)。strlen("中文") 返回 6(UTF-8 編碼下每字 3 位元組),而非 2。處理多語言請使用 `mbstring` 函式。

2. 理論長度無上限

字串大小僅受限於 `memory_limit` 設定與可用記憶體。

3. 定義方式與差異

語法範例變數解析逸出字元效能
單引號'hello'否僅 \\ \'略快
雙引號"hello $name"是完整支援 \n \t 等稍慢
Heredoc<<<EOT ... EOT;是同雙引號同雙引號
Nowdoc<<<'EOT' ... EOT;否無解析同單引號

4. 雙引號變數解析細節

<?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) - 明確轉型

最佳實踐建議

  1. 嚴格比較:習慣使用 `===` / `!==` 避免隱含轉換陷阱(如 "0" == false // true)。
  2. 型別宣告:PHP 7+ 支援函式參數/返回值型別宣告,盡量啟用 declare(strict_types=1); 強制模式。
  3. 字串選擇:不需解析變數時優先用單引號;需換行、定義大段模板用 Heredoc/Nowdoc 保持可讀性。
  4. 空值檢查:區分 null、""、0、false,使用 `isset()`、`empty()`、`is_null()` 時明確語意。

結語

掌握這三大核心觀念,能避開 80% 以上的 PHP 型別相關 Bug。建議配合官方文件「型別」章節深入研讀,並實際測試各種邊界情況。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved