PHP靜態變數與動態變數是新手要掌握的觀念,在此先介紹系統常量(常數)用法,進而說明如何設定及引用,透過簡單範例帶你熟悉這2個必學基本用法。
目錄
Toggle一、固定使用常量
首先介紹在PHP裡面有些是可以固定使用的值,在數學稱之為是常數,在程式中一般也是稱之為常數,贊贊小屋這此為了區別,在這篇文章中稱之為是常量。
從左邊的PHP程式碼可以看到它是由前後各兩個下底線和常數名稱所組成,從右側的結果預覽會看到常數的名稱大致上就是所代表的對象。例如包含路徑的檔案名稱、程式碼行號、PHP版本、文件所在路徑、所處的作業系統等等。

二、程式變量設定
瞭解了常量之後,接下來介紹變量(變數)。在此先用前置詞「$」設定一個密碼變量:「$密碼」,它的值是「1234」。然後先以PHP echo語句將密碼列印出來是「1234」,然後再用相同方式將密碼這個變量設定其值為「5678」,並且再一次列印出來,可以看到在右側的預覽效果就是「5678」。這便是變量特性,它是可以在程式中一再改變它所代表的值,並非固定的。

三、define常量函數
接下來介紹如何定義常量,會使用到PHP define函數,它有兩個參數,第一個參數是常量的名稱,第二個參數是常量的值。然後在引用的時候直接加上常量名稱,例如這裡的「echo 密碼」,不需要像變量那樣還要加上一個「$」錢字號。
最後嘗試要利用define像上個步驟一樣改變常量密碼的值,PHP會提示錯誤,表示常量密碼已經有定義過了,無法更改,亦即常量值不能改變,無法再次定義,如此應該能瞭解了常量與變量的差異。

四、變量引用方法
瞭解了常量和變量的差異之後,進一步介紹變量的用法。在這裡先設定一個變量「帳號」,其內容是「Zanzan1」,接著再設定另外一個變量「Name」,它的變量值是等於變量「帳號」,利用echo命令可以知道「帳號」和「Name」列印出來都是「Zanan1」。
接下來進行簡單的PHP字串處理,如果再將變量「帳號」更改設定為「Zanzan2」,接著再次測試,可以看到「帳號」變量已經改變了,但是「Name」變量的值並沒有改變。由此可知當一個變量B去直接引用另外一個變量A內容的時候,在引用之後就是一個獨立的變量了,即使另外一個變量A有所改變,變量B也不會受到影響。

五、值與索引的差異
在上個步驟的基礎上,介紹另外一種變量設定引用的方法。例如這裡看到的「Name」在引用「帳號」的時候前面多加了一個連接符號「&」,然後和上個步驟一樣改變第一個變量「帳號」的值,接著再用echo語句就會發現到兩個變量值同時都改變了。
換句話說,當程式在引用其他變量的時候,如果加上連接符號,代表不僅僅是單純引用它的內容,而是去引用它相對應的記憶體空間,或者理解為倉庫的儲物位置、飯店的房號地址,因此當這個倉庫或房間裡面的東西有所改變,兩個變量都是指向這一個記憶體地址位置,兩個變量值都會同時改變。
這是屬於變數引用來源的基礎觀念,另外還一個層面是屬於作用範圍,讀者有興趣可以參考贊贊小屋關於VBA宣告變數的文章,雖然是不同的程式語言,但是觀念是相通的。

六、命名規則大小寫
接著補充程式語言都會有變量名稱設定規則。其中一項比較基本的是區分英文大小寫,這裡舉個簡單範例,設定開頭大寫的「Name」跟開頭小寫的「name」兩個變量,測試後可以得知在PHP語言裡面大寫英文字母跟小寫英文字母是不同對象,在設定變量名稱的時候要特別注意。
讀者如果有VBA宣告變數的經驗的話,會知道VBA它是不區分大小寫的,剛好可以和PHP做個對比。

七、PHP靜態變數補充
關於英文大小寫,在定義常量的時候其實有第三個參數,只是跟Excel公式一樣,有些後面的參數可以省略,省略的話會有預設值。例如在此將「name2」第3參數值設定為「true」,執行程式會提示錯誤,從錯誤說明可以知道它是對於是否大小寫敏感的參數。然而雖有此第三個參數,實務中不會特地用到,況且在比較新的PHP版本也已不再支持這個參數的使用了,這裡是順帶一提。
可想而知,常量已經回歸到跟變量一樣,同樣是嚴格區分大小寫,這個部分讀者有興趣可以用上個步驟相同方法簡單測試看看,應該就能夠瞭解答案了。

變量與變數之間的思考
這篇文章在用語上有時候使用變量,有時候使用變數,兩著在意思上可以相通,常量和常數也是如此,也可以將它理解為同義詞,同一個東西不同人的叫法差異。
相對而言贊贊小屋在這篇文章比較偏好使用變量和常量,因為變數比較像是數學用語,使用變量的話會比較能夠凸顯出它是在程式中使用,不過程式一開始起源本來就是為了解決大量複雜計算的問題,變量變數正是引用自數學的概念。
另一方面,由於在程式裡面有許多不同的資料類型,使用變數似乎侷限於數值資料,變量從字面上相對而言較為廣泛,這部分純粹是贊贊小屋個人想法,讀者可以依照自己的情況使用變量或者是變數的稱呼。
本文章講解影片:

歡迎前住贊贊小屋VBA教學中心。
取得範例程式請前往VBA社團,訂閱請加入VBA Line社群。
VBA課程推薦:零基礎入門進階的20小時完整內容