PHP 變數 (Variable)
變數是用來儲存資料的容器。PHP 是弱型別語言,變數不需要事先宣告型別,PHP 會根據賦予的值自動決定型別。
變數語法
PHP 變數以 $ 符號開頭,後面接變數名稱:
<?php
$name = "Alice";
$age = 25;
$price = 99.99;
$isStudent = true;
?>
變數命名規則
變數名稱必須遵循以下規則:
- 以
$開頭 - 第一個字元必須是字母或底線
_ - 後續字元可以是字母、數字或底線
- 區分大小寫
<?php
// 合法的變數名稱
$name = "Alice";
$_name = "Bob";
$name2 = "Charlie";
$firstName = "David";
$first_name = "Eve";
// 不合法的變數名稱
// $2name = "Frank"; // 不能以數字開頭
// $first-name = "Grace"; // 不能包含連字號
// $first name = "Henry"; // 不能包含空格
?>
命名慣例
PHP 社群常用的命名慣例:
<?php
// 駝峰式 (camelCase) - 常用於變數和函數
$firstName = "Alice";
$totalAmount = 100;
// 蛇底式 (snake_case) - 也常用於變數
$first_name = "Alice";
$total_amount = 100;
// Pascal Case - 常用於類別名稱
class UserAccount {}
class ShoppingCart {}
// 常數使用全大寫加底線
define('MAX_SIZE', 100);
const DATABASE_HOST = 'localhost';
?>
賦值
使用 = 運算子賦值:
<?php
$x = 10;
$y = 20;
$z = $x + $y; // $z = 30
// 可以在同一行賦值多個變數
$a = $b = $c = 0; // 三個變數都是 0
?>
變數型別
PHP 會自動判斷變數型別:
<?php
$string = "Hello"; // string
$integer = 42; // integer
$float = 3.14; // float (double)
$boolean = true; // boolean
$array = [1, 2, 3]; // array
$null = null; // NULL
// 使用 gettype() 查看型別
echo gettype($string); // string
echo gettype($integer); // integer
echo gettype($float); // double
echo gettype($boolean); // boolean
?>
動態型別
變數可以隨時改變型別:
<?php
$var = "Hello";
echo gettype($var); // string
$var = 123;
echo gettype($var); // integer
$var = 3.14;
echo gettype($var); // double
$var = true;
echo gettype($var); // boolean
?>
檢查變數
isset() - 檢查變數是否存在且不為 null
<?php
$name = "Alice";
$age = 0;
$empty = "";
$nothing = null;
var_dump(isset($name)); // bool(true)
var_dump(isset($age)); // bool(true)
var_dump(isset($empty)); // bool(true)
var_dump(isset($nothing)); // bool(false) - null 視為未設定
var_dump(isset($undefined)); // bool(false)
?>
empty() - 檢查變數是否為空
以下值被視為空:"" (空字串)、0、0.0、"0"、null、false、[] (空陣列)
<?php
$name = "Alice";
$age = 0;
$empty = "";
$nothing = null;
var_dump(empty($name)); // bool(false)
var_dump(empty($age)); // bool(true) - 0 視為空
var_dump(empty($empty)); // bool(true)
var_dump(empty($nothing)); // bool(true)
var_dump(empty($undefined));// bool(true)
?>
is_null() - 檢查變數是否為 null
<?php
$nothing = null;
$name = "Alice";
var_dump(is_null($nothing)); // bool(true)
var_dump(is_null($name)); // bool(false)
?>
變數的變數 (Variable Variables)
PHP 支援使用變數的值作為另一個變數的名稱:
<?php
$varName = "hello";
$$varName = "World"; // 等同於 $hello = "World"
echo $hello; // World
echo $$varName; // World
?>
實際應用範例:
<?php
$fields = ['name', 'email', 'phone'];
foreach ($fields as $field) {
$$field = $_POST[$field] ?? '';
}
// 現在有 $name, $email, $phone 三個變數
echo $name;
echo $email;
echo $phone;
?>
變數的變數可能會讓程式碼難以閱讀和維護,建議謹慎使用,通常使用陣列是更好的選擇。
變數作用域
變數的作用域決定了變數在哪裡可以被存取:
<?php
$global = "全域變數";
function test() {
$local = "區域變數";
// 無法直接存取全域變數
// echo $global; // 警告:未定義變數
echo $local; // 區域變數
}
test();
echo $global; // 全域變數
// echo $local; // 錯誤:未定義變數
?>
更詳細的作用域說明請參考 變數作用域 章節。
參考賦值 (Reference Assignment)
使用 & 可以建立變數的參考,兩個變數會指向同一個值:
<?php
$a = 10;
$b = &$a; // $b 是 $a 的參考
echo $a; // 10
echo $b; // 10
$b = 20;
echo $a; // 20 - $a 也被改變了
echo $b; // 20
?>
一般賦值 vs 參考賦值
<?php
// 一般賦值(複製值)
$a = 10;
$b = $a;
$b = 20;
echo $a; // 10 - $a 不受影響
// 參考賦值(指向同一個值)
$x = 10;
$y = &$x;
$y = 20;
echo $x; // 20 - $x 也被改變
?>
預定義變數
PHP 提供了許多預定義變數,稱為超全域變數:
<?php
// 超全域變數(Superglobals)
$_GET // URL 參數
$_POST // POST 資料
$_REQUEST // GET + POST + COOKIE
$_SESSION // Session 資料
$_COOKIE // Cookie 資料
$_FILES // 上傳的檔案
$_SERVER // 伺服器和執行環境資訊
$_ENV // 環境變數
$GLOBALS // 所有全域變數的參考
// 範例
echo $_SERVER['REQUEST_METHOD']; // GET 或 POST
echo $_SERVER['HTTP_USER_AGENT']; // 瀏覽器資訊
?>
更詳細的說明請參考 超全域變數 章節。
常用的變數函數
<?php
$var = "Hello";
// 取得型別
echo gettype($var); // string
// 列印變數資訊(除錯用)
var_dump($var); // string(5) "Hello"
print_r($var); // Hello
// 檢查型別
var_dump(is_string($var)); // bool(true)
var_dump(is_int($var)); // bool(false)
var_dump(is_array($var)); // bool(false)
var_dump(is_bool($var)); // bool(false)
var_dump(is_null($var)); // bool(false)
// 刪除變數
unset($var);
var_dump(isset($var)); // bool(false)
?>