全域變數區域變數差別是學習程式的基本觀念,本文以PHP function用法作為範例,教你如何設計匯率換算工具,如何在函數內以global引用變數,補充可能有的錯誤。
目錄
Toggle一、匯率換算範例
文章範例是簡單的匯率換算。首先是「原幣金額」和「美金匯率」,這兩個變數相乘得到「本幣金額」。左側程式碼在PHP文件中加了一些html標籤樣式的設定,達到PHP Html連結的作用,右側是預覽效果。

二、PHP function用法
PHP定義函數的方法如同截圖所示,使用function命令,函數名稱加上左右括號,接著一個左邊大括號,換行之後是函數想要執行的語句,最後再一個右邊的大括號,結束整個函數的設計。像這樣經過實際設計操作,對於PHP是什麼會有更具體的瞭解,是學習一問程式語言的實踐方法。
先做個簡單測試,明明自定義函數的名稱是「本幣金額」,但是在引用函數的時候使用「匯率換算」,執行結果會提示錯誤,原因是發現到匯率換算是一個沒有定義的函數。

三、未定義變數錯誤
接下來正式使用正確的函數名稱,function語句和上個步驟相同,引用的時候把原來的「匯率換算」PHP程式碼劃為註解,改為「本幣金額」,仍然會提示Undefined Variable錯誤,這次錯誤原因是沒有定義的變數F跟X。
有點奇怪,明明一開始已經定義好了F跟X這兩個變數名稱,引用名稱也沒有錯誤的情形。

四、全域變數區域變數差別
針對上個步驟所發生的錯誤,在此提出區域變數和全域變數的概念。PHP或者很多程式語言中,全域變數指的是設定好的變數可以在整份文件中使用,區域變數只在目前所在的函數語句範圍內有效。從另外一個角度理解,每次程式執行就是跑整份文件,像第一步驟那樣的變數可以在整份文件使用,這個就是全域(全部地域)的意思,範圍有限的話就是區域變數,例如只能在函數內使用。
上個步驟則是在函數裡面無法直接使用全域變數,因為程式預定了自定義變數就應該使用自己的變數,也就是區域變數的概念,這個和靜態動態變數一樣,都是PHP入門必須瞭解的基本觀念。。
為了方便起見,想要在自定義函數裡面使用全域變數,可以使用這裡看到的global,後面加上想要使用的全域變數「global $F」,從右側的結果預覽看到函數已經能夠正常運作,不會再有上個步驟所看到的錯誤提示。

五、程式執行測試
有了全域變數和區域變數的概念之後,設計簡單的範例進行測試。
首先是和上個步驟同樣的程式代碼,不過在函數內部已經global引用全域變數F及X之後,進一步將F變數設定為是200,右側預覽結果為原幣金額100跟美金匯率30,利用類似PHP取餘數的簡單公式運算,出來的金額應該是3000,但卻顯示6000。
這是因為雖然前後的原幣金額都是變數F,但是第1個F為全域變數,它的值是一開始設定的100,第2個F則是函數裡面的區域變數,在函數裡面global只是單純引用全域變數F的值,等於是又另外建立一個區域變數F,而且接著再去變更這個區域變數F的值,全域變數和區域變數是兩個分開的獨立變數,因此會得到右側預覽的結果。

六、unset刪除變數
為了更加瞭解全域區域兩個分開獨立的變數概念,延續上個步驟範例,同樣設定兩個相同名稱都是F的變數,一個是全域變數,原幣金額100元,另外一個是函數裡面的區域變數F,先以global引用再直接設定為200。
在此重點是針對全域變數使用unset這個命令,它跟PHP echo一樣是內置函數,其作用是會刪除刮號裡的變數。從右側預覽結果瞭解到在第21行全域變數已被unset刪除,所以會提示沒有定義變數的錯誤,可是在區域變數裡面F還是存在的,所以能順利算出換算金額6000。

七、函數內刪除測試
熟悉了Unset刪除變數的作用之後,上個步驟是刪除全域變數,利用跟Excel VBA多行註解相同技巧,在此先將它加一個「#」井字號註解掉,然後在函數裡面使用相同方法,將函數內部的區域變數F刪除。
測試結果符合預期,全域變數人民幣金額100有正常顯示,可是函數裡面計算的6000則因為區域變數已經被刪除了,提示是沒有定義的變數,沒有辦法使用。

程式語言設計心得
這篇文章介紹到unset命令,其作用是刪除已經定義好的變數,不管是全域變速或區域變數都可以。不過實務場合其實很少用到,因為通常在PHP或者Python程式裡面,設定好了變數只要不去使用,通常並不會消耗到電腦的計算資源,頂多是佔據微小的記憶體空間,沒有必要特別使用unset函數刪除。不過也有可能像這篇文章特殊場合,剛好在教學範例中用到了,因此仍然可以瞭解一下在PHP有這個較為特殊的unset用法。
贊贊小屋程式設計自學:
Linux教學、Python教學、HTML自學入門、手機App製作教學、Synology NAS教學。
