針對 PHP 變數的部分,我主要會分成5個主題來討論,分別是:
- basic
- predefined variables
- variable scope
- variable variables
- variables from external sources
basic
這個部分會討論如何宣告一個變數以及賦予變數數值。
1. Declare
首先是宣告變數的部分。
- 在 PHP 裡面宣告變數的方式是使用$ (錢符號)加上一個任意的名稱,例如 $name、$age
- 和其他程式語言不同的地方在於,在宣告變數的時候不需要特別指定型態,變數的型態會由賦予它的數值來決定。
特別注意的是,變數名稱不可以由數字做開頭
1 | $name; |
2. Assign value
在賦值的部分,通常情況下會和宣告結合,也就是說在宣告變數的同時賦予變數數值。
- 根據前面所提到的,你可以指派任一型態的數值給變數,變數會依據數值轉換自身的型態
可以透過直接賦值、回傳函式或是 & (取參考) 的方式賦予變數數值。
由下面的範例可以更清楚了解。直接賦值
將數值直接傳遞給變數。
1 | $name = 'Jason'; |
- 回傳函式
在函式內計算完結果後,再將數值回傳給變數。 (關於函式的部分,更詳細的說明會在第7章)
1 | function getAge(){ |
- 取參考
當宣告一個新的變數的時候,電腦會分配一塊記憶體空間給變數,用來儲存變數的數值。
而透過 & (取參考符號)可以將這個記憶體空間分配給另一個變數。
換句話說,取參考的變數 和 被取參考的變數 是同樣的2個變數,只是擁有不同的名稱而已。
1 | $name = 'Jason'; |
特別注意
- 取參考不可用於一個未命名的表達式
- 取參考也不可以用於參考回傳數值的函式
1 | $value = &(10*10); // 發生錯誤,不可用於參考未命名的表達式 |
predefined variables
PHP 已經有在腳本裡面預先定義了變數,這些稱為預定義變數。
透過使用預定義變數,可以幫助更快速的解決問題。
而根據 server 版本的不同,可能會有不同的預定義變數,因此這裡僅介紹一些常見的全域預定義變數。
- $GLOBAL:
可以取得所有的全域變數 - $_SERVER:
可以取得有關 header, path… 等訊息 - $_REQUEST:
儲存透過 HTML 表單傳來的資料 - $_POST:
儲存透過 POST 方法傳來的資料 - $_GET:
儲存透過 GET 方法傳來的資料 - $_FILES:
儲存用 POST 方法上傳的檔案資料 - $_ENV:
儲存所有 PHP 的環境變數 - $_COOKIE:
儲存著所有 COOKIE 的資料 - $_SESSION:
儲存著所有 SESSION 的資料
variable scope
變數的範圍是指說,變數被宣告、可以呼叫、可以被使用的範圍。
依據範圍的劃分可以分為
- 全域變數: 表示在整個 PHP 檔案中都可以自由呼叫
- 區域變數: 只有在宣告的範圍內可以成功呼叫
1 | $globalVar = 20; // 屬於全域變數 |
variable variables
PHP 可以將變數當成一個新的變數的名稱,也就是說新的變數會有2個$符號,例如:$$name。
$$name 就是將 $name 當成一個名稱去建立新的變數,這2者是不一樣的!
1 | $var = "hello"; |
這個我認為是 PHP 提供的一個很好玩的特性,也許在某種層面上它也有很方便的實做效用~
因為 PHP 會利用變數的名稱去搜尋對應的變數或方法並加以執行,也就是說這種方式也可以利用到函式上,這同樣會在第7章提到。
1 | $str1 = "string 1"; |
variables from external sources
最後則是從外部傳來的資訊。
可以是透過 HTML 表單、GET方法或 POST方法傳來的資料
- HTML 表單 POST 範例
1 | <form action="foo.php" method="post"> |
- 透過 GET 方法取得資料範例
只有透過 GET 方法傳遞的資料才能透過 _GET 取得
1 | $userName = _GET['userName']; |
- 透過 POST 方法取得資料範例
只有透過 GET 方法傳遞的資料才能透過 _POST 取得
1 | $userName = _POST['userName']; |