---
# System prepended metadata

title: PHP的變數與常數

---

# PHP的變數與常數

學習任何程式語言的第一步就是了解變數與常數
變數顧名思義就是隨時可變動的資料
而常數恰巧與變數相反，資料一旦定義就不可任意更動

### 變數如何宣告
我們來看看PHP如何進行變數宣告 ( variable declarations )

```php=
$myVar = 3; //宣告變數myVar, 並且存放數值3
```

:::info
:bulb: **提示** : 凡是以 **$** 為開頭的就是變數
:bulb: **提示** : 雙引號 **//** 後所存放的內容表示註解，程式不會執行                
:::


我們先來了解上述這行程式在電腦裡是如何運作的呢?
當我們宣告一個變數
程式執行後就會跟記憶體索取一個位置 ( Memory Address )
這個位置都會用來存放變數的任何資料

:::info
:bulb: **提示** : 記憶體位置的大小取得於變數的[資料型態](https://)              
:::

我們可以用一個更簡單的例子來理解
當變數宣告後就好比取得一個空的箱子 [( 記憶體位置 )](/features)
然後在箱子外面寫上myVar [( 變數名稱 )](/features)
之後箱子裡面就可以塞任何東西啦

初次接觸程式設計的人可能會直覺認為$myVar等於3
雖然這句話的字面理解並沒有錯
但是程式設計的 **等於** 與我們認知數學的 **等於** 概念是不同的
這裡的 **等於** 是 **指派** 的意思
就好比我們把東西丟到箱子裡面
再來看看以下例子

```php=
$myVar = 3; //宣告變數myVar, 並且存放數值3
$myVar = $myVar+1; //將變數運算後再指派給變數
echo $myVar; //將結果輸出
```

所以上述這段程式可以解釋為宣告一個變數
然後將數值3指派給變數myVar
接著再將變數myVar的值加上1
最後再指派給變數myVar
所以變數myVar最後的值就是4

:::info
:bulb: **提示** : **echo** 就是將結果輸出到螢幕上
:bulb: **提示** : **=** 的右半部可視為運算過程                 
:::


---

### 變數的命名規則
上一節有提到凡是以 **$** 為開頭的都是變數
符號 $ 後面接的第一個字元只能以英文大小寫或是底線開頭
數字是不允許當作第一個字元的

```php=
$book //正確
$_book //正確
$2book //錯誤
```

變數名稱是有大小寫區分的
以下三種寫法會被視為不同的變數

```php=
$car
$Car
$CAR
```

盡量取有意義的英文單字，或是多個英文單字的組合
若是多個英文單字組合成的變數
建議第一個英文單字用小寫，後面的英文單詞的第一個字再用大寫
這樣可以與 [常數](https://)、[class](https://) 或 [function](https://) 進行區隔

```php=
$whiteDog 
$blackCat
```

---

### 常數如何宣告

```php=
define("常數名稱",常數值); //PHP原本就支援
const 常數名稱 = 常數值; //PHP5.3版後才可用此方法
```

根據官方文件說明，常數命名規則應與變數相同，但是透過 [define()](https://) 函式卻可以不受此限，只是不建議這樣做

---

### 常數的命名規則
常數命名規則與變數相同
常數可省略符號 $ ，後面接的第一個字元只能以英文大小寫或是底線開頭
數字是不允許當作第一個字元的
常數一般會採用大寫，但不按照此規則也是可以
主要目的是為能由程式碼中快速辨識[常數](/features)與[變數](/features)

```php=
define("PI",3.1415926); //定義常數PI(π)
$radius = 8; //圓的半徑
$circleArea = $radius*$radius*PI;
```
常數一般會用在何種情況呢
比如說分數的滿分上限是100
這時候採用常數會比變數來得好
避免數值不小心被其他程式修改到

### 魔術常數

PHP中有許多系統預設的常數供開發者使用，稱之為魔術常數，魔術常數前後都是以兩個底線包圍，**[完整的常數魔術請參考這](https://www.php.net/manual/en/language.constants.predefined.php)**

