萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 網路程式設計 >> PHP 程式設計

PHP 變數完整指南:命名規則、作用域、參考賦值、超全域變數與最佳實踐

變數命名規則

  • 以 $ 開頭,後接字母或底線,再接任意字母、數字、底線:^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$。
  • **大小寫敏感**:$var ≠ $Var。
  • 合法範例:$var, $Var, $_4site, $täyte (UTF-8 字元)。
  • 非法:$4site (數字開頭)。

賦值機制:值傳遞 vs 參考傳遞

<?php
$foo = 'Bob';
$bar = &$foo;      // 參考賦值
$bar = "My name is $bar";
echo $foo; // "My name is Bob" (foo 也被改變)
echo $bar; // "My name is Bob"

// 只有「已命名變數」可被參考
$bar = &(24 * 7); // Fatal Error: Cannot use unnamed expression as reference
function test() { return 25; }
$bar = &test();   // Fatal Error: Cannot return reference from function not declared as returning by reference

變數作用域

模式語法行為適用場景
值傳遞 (預設)$b = $a;複製資料,互不影響純量、陣列 (複製整個陣列)
參考傳遞$b = &$a;$b 成為 $a 別名,修改任一皆影響另一大型陣列/物件避免複製、需同步修改

變數的變數 (Variable Variables)

<?php
$var = 'name';
$$var = 'John'; // 等同 $name = 'John';
echo $name; // John

// 陣列鍵名動態
$key = 'user_name';
$$key = 'Alice'; // $user_name = 'Alice'

// 結合解構 (PHP 8.0+)
[$$key] = ['Bob']; // $user_name = 'Bob'

慎用:降低可讀性、靜態分析困難、安全風險 (用戶輸入控制變數名)。現代框架極少使用。

PHP 外部變數來源

  • HTTP 請求:$_GET (查詢字串)、$_POST (表單 POST)、$_REQUEST (合併 G/P/C,**不推薦使用**、順序依 request_order 設定)。
  • 檔案上傳:$_FILES。
  • 環境/伺服器:$_SERVER (含 REQUEST_URI, HTTP_USER_AGENT 等)、$_ENV。
  • Session:$_SESSION (需 session_start())。

最佳實踐清單

  1. 嚴格型別模式:檔案頂端 declare(strict_types=1);。
  2. 型別宣告:函數參數、回傳值、類別屬性 (PHP 7.4+) 全部加型別。
  3. 不可變習慣:傾向 const、readonly 屬性、回傳新物件而非修改現有物件。
  4. 避免全域狀態:依賴注入容器 (PSR-11) 管理服務實例。
  5. 變數命名語意化:$userCount 而非 $cnt、$isActive 而非 $flag。

結語

變數是程式操作資料的符號。理解 PHP 獨特的參考機制、作用域規則與超全域變數來源,配合現代型別系統與靜態分析工具,能避開 90% 的變數相關 Bug,寫出清晰可靠的程式碼。

copyright © 萬盛學電腦網 all rights reserved
範圍存取方式生命週期
區域 (函數/方法內)直接使用函數結束銷毀
全域global $var 或 $GLOBALS['var']腳本結束銷毀
靜態區域static $var = 0;跨呼叫保持值,僅初始化一次
超全域$_GET, $_POST, $_SESSION, $_COOKIE, $_SERVER, $_ENV, $_FILES, $GLOBALS全腳本任意位置可存取,自動全域