PHP Conference Japan 2024

基本知識

PHP 中的變數以錢字號 ($) 後接變數名稱表示。變數名稱區分大小寫。

有效的變數名稱以字母(`A-Z`、`a-z` 或 128 到 255 的位元組)或底線開頭,後接任意數量的字母、數字或底線。以正規表示式表示如下:^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$

注意PHP 不支援 Unicode 變數名稱,但是,某些字元編碼(例如 UTF-8)會以多位元組字元的所有位元組都落在允許範圍內的方式編碼字元,從而使其成為有效的變數名稱。

注意`$this` 是一個特殊變數,無法賦值。在 PHP 7.1.0 之前,可以間接賦值(例如,使用可變變數)。

提示

另請參閱使用者命名指南

範例 #1 有效和無效的變數名稱

<?php
$var
= 'Bob';
$Var = 'Joe';
echo
"$var, $Var"; // 輸出 "Bob, Joe"

$4site = 'not yet'; // 無效;以數字開頭
$_4site = 'not yet'; // 有效;以下底線開頭
$täyte = 'mansikka'; // 有效; 'ä' 是(擴展)ASCII 228。
?>

PHP 接受任何位元組序列作為變數名稱。不遵循上述命名規則的變數名稱只能在執行階段動態存取。有關如何存取它們的資訊,請參閱可變變數

範例 #2 存取特殊的變數名稱

<?php
${'invalid-name'} = 'bar';
$name = 'invalid-name';
echo ${
'invalid-name'}, " ", $$name;
?>

上述範例將輸出

bar bar

預設情況下,變數一律按值賦值。也就是說,當一個表達式賦值給一個變數時,原始表達式的整個值會複製到目標變數中。這表示,例如,在將一個變數的值賦值給另一個變數之後,更改其中一個變數不會影響另一個變數。有關這種類型賦值的更多資訊,請參閱表達式一章。

PHP 也提供了另一種將值賦值給變數的方法:透過參考賦值。這表示新變數只是參考(換句話說,「成為…的別名」或「指向」)原始變數。對新變數的更改會影響原始變數,反之亦然。

要透過參考賦值,只需在被賦值的變數(來源變數)的開頭加上一個「&」符號 (&)。例如,以下程式碼片段會輸出兩次「My name is Bob

<?php
$foo
= 'Bob'; // 將值 'Bob' 賦值給 $foo
$bar = &$foo; // 透過 $bar 參考 $foo。
$bar = "My name is $bar"; // 修改 $bar...
echo $bar;
echo
$foo; // $foo 也被修改了。
?>

需要注意的重要一點是,只有變數可以被賦值為參考。

<?php
$foo
= 25;
$bar = &$foo; // 這是有效的賦值。
$bar = &(24 * 7); // 無效;參考了一個未命名的表達式。

function test()
{
return
25;
}

$bar = &test(); // 無效,因為 test() 沒有透過參考傳回變數。
?>

在 PHP 中不一定要宣告變數,然而,這是一個非常好的習慣。存取未定義的變數會導致 E_WARNING(在 PHP 8.0.0 之前是 E_NOTICE)。未定義的變數預設值為 null。可以使用 isset() 語言結構來檢測變數是否已經初始化。

範例 #3 未初始化變數的預設值

<?php
// 未設定且未參考(無使用情境)的變數。
var_dump($unset_var);
?>

上述範例將輸出

Warning: Undefined variable $unset_var in ...
NULL

PHP 允許從未定義的變數自動建立陣列(自動生成)。將元素附加到未定義的變數將會建立一個新的陣列,並且不會產生警告。

範例 #4 從未定義的變數自動建立陣列

<?php
$unset_array
[] = 'value'; // 不會產生警告。
?>
警告

當一個檔案包含在另一個使用相同變數名稱的檔案中時,依賴未初始化變數的預設值會產生問題。

可以使用 unset() 語言結構來銷毀變數。

有關變數相關函式的資訊,請參閱變數函式參考

新增註釋

使用者貢獻的註釋 1 則註釋

13
anisgazig at gmail dot com
3 年前
變數宣告規則和分類的清晰概念

變數宣告規則

1. 以錢字號 ($) 開頭
2. 變數名稱的第一個字母來自 a-zA-z_
3. 變數名稱的後續字母來自 a-zA-Z0-9_
4. 無空格,無語法 (應為:無空格,無語法錯誤)

變數的分類

變數主要有兩種
1. 預定義變數
2. 使用者自訂變數

預定義變數
PHP 8 中有 12 個預定義變數
1. $GLOBALS
2. $_SERVER
3. $_REQUEST
4. $_FILES
5. $_ENV
6. $_SESSION
7. $_COOKIE
8. $_GET
9. $_POST
10. $http_response_header
11. $argc
12. $argv

使用者自訂變數
使用者自訂變數有三種
1. 變數作用域
2. 可變變數 (動態變數)
3. 參考變數 (引用變數)

變數作用域
變數作用域有三種
1. 區域作用域
2. 全域作用域
3. 靜態變數
To Top