# 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)**