<?php $variable_name = "value"; // 以 $ 開頭,後接名稱 ?>
_$var ≠ $Var ≠ $VAR$name, $user_name, $_private, $item123$123item, $user-name, $user namePHP 為弱型別、動態型別語言:
integer, float, string, boolean, array, object, resource, NULL<?php
$str = "Hello"; // string
$int = 42; // integer
$float = 3.14; // float
$bool = true; // boolean
$arr = [1, 2, 3]; // array
$obj = new StdClass; // object
$res = fopen('file.txt', 'r'); // resource
$null = null; // NULL
?>
函數內部宣告的變數,僅在該函數內可見。
<?php
function test() {
$local = "我是區域變數";
echo $local; // 正常
}
test();
// echo $local; // 錯誤:未定義
?>
函數外部定義的變數為全域變數。函數內需用 global 關鍵字引用。
<?php
$global = "外部";
function test() {
global $global; // 引入全域變數
$global .= " -> 內部修改";
echo $global; // 輸出:外部 -> 內部修改
}
test();
echo $global; // 輸出:外部 -> 內部修改 (全域變數已被修改)
?>
所有全域變數自動存入 $GLOBALS['var_name'],函數內可直接存取,無需 global。
<?php
$x = 5; $y = 10;
function sum() {
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
sum();
echo $z; // 15
?>
函數結束後保留值,下次呼叫繼續使用。僅在函數內可見。
<?php
function counter() {
static $count = 0;
$count++;
echo $count . ' ';
}
counter(); // 1
counter(); // 2
counter(); // 3
?>
靜態變數常用於:遞迴計數、快取計算結果、單例模式實例儲存。
函數參數屬於區域變數,由呼叫者傳值/傳址建立。
<?php
function add($a, $b) { // $a, $b 為參數變數
return $a + $b;
}
echo add(3, 5); // 8
?>
| 變數 | 用途 | 範例 |
|---|---|---|
$GLOBALS | 所有全域變數 | $GLOBALS['config'] |
$_SERVER | 伺服器與執行環境資訊 | $_SERVER['REQUEST_URI'], $_SERVER['HTTP_HOST'] |
$_GET | URL 查詢字串參數 | $_GET['id'] |
$_POST | POST 表單資料 | $_POST['username'] |
$_REQUEST | $_GET + $_POST + $_COOKIE (不建議使用) | |
$_SESSION | Session 資料 | $_SESSION['user_id'] |
$_COOKIE | Cookie 資料 | $_COOKIE['remember_me'] |
$_FILES | 上傳檔案資訊 | $_FILES['avatar']['tmp_name'] |
$_ENV | 環境變數 | $_ENV['APP_ENV'] |
<?php $a = 10; $b = &$a; // $b 參考 $a $b = 20; echo $a; // 20 unset($b); // 僅銷毀引用,$a 仍存在 echo $a; // 20 unset($a); // 完全銷毀變數 // echo $a; // Notice: Undefined variable ?>
| 函數 | 用途 | 範例 |
|---|---|---|
gettype($var) | 取得型別字串 | "integer", "array" |
settype($var, $type) | 強制轉型 (修改原變數) | settype($x, "integer") |
(int)$var, (string)$var | 暫時轉型 (不修改原變數) | $int = (int)"123abc"; // 123 |
is_int(), is_string(), is_array()... | 型別檢查 (回傳 bool) | is_array([]) // true |
isset($var) | 變數存在且非 null | |
empty($var) | 變數不存在或為「空」值 (0, "", [], null, false) |
error_reporting(E_ALL) 開發階段。foreach ($arr as &$v) { $v *= 2; }
unset($v); // 必須釋放參考,否則 $v 仍指向最後一個元素
$name = 'foo'; $$name = 'bar'; // $foo = 'bar' — 僅在極少數動態情境使用,降低可讀性。$GLOBALS, $_POST 等作為自訂變數名。<?php
// 參數型別宣告
function add(int $a, int $b): int {
return $a + $b;
}
// 嚴格模式 (檔案頂部)
declare(strict_types=1);
add(1.5, 2); // TypeError: Argument 1 must be int, float given
?>
PHP 變數以 $ 開頭、弱型別動態建立、作用域分為區域/全域/靜態/參數四種。善用 $GLOBALS、global、static 關鍵字控制可見範圍,熟悉 9 大超全域陣列,配合 declare(strict_types=1) 嚴格模式,即能寫出型別安全、易維護的現代 PHP 程式碼。