什麼是全域變數?
全域變數也稱為外部變量,是在函數的外部定義的,它的作用域為從變數定義處開始,到這個程式檔案的結尾。和其他程式語言不同,全域變數不是自動設定為可用的。上一章節我們介紹了php變數的範圍的局部變數,在PHP中,由於函數可以視為單獨的程式碼片段,所以局部變數會覆蓋全域變數的能見度,因此在函數中無法直接呼叫全域變數。
其程式碼如下所示的格式:
<?php $one = 10; $two = 20; // 测试在函数内部不能直接使用全局变量 $one 和 $two function sum(){ // 在函数内部新声明并且没有赋初始值的两个变量 echo "运算结果:".($one+$two)."<br>"; } sum(); //调用函数 ?>
該程式執行後輸出的結果如下顯示:
运算结果:0 // 两个变量没有初始值则为 NULL ,执行两个空值相加后结果为 0
在上面的實例中,函數sum() 外面宣告了兩個全域變數$one 和$twe,但在PHP中,不能直接在函數中使用全域變數。所以在 sum() 函數中使用的變數為 $one 和 $twe,相當於重新宣告的兩個變量,且沒有被賦予初始值,是兩個未定義空值的運算,所以得到的結果為0。在函數中若要使用全域變量,必須利用關鍵字定義目標變量,而這個全域變數的關鍵字為「 global 」, 使用關鍵字「global」你就可以把全域資料匯入到在一個函數的局部範圍內,以告訴函數主體此變數為全域變數。
下面在函數內部使用關鍵字「global」 呼叫函數外部宣告的全域變數來舉例:
<?php $one = 10; $two = 20; // 测试在函数内部使用关键字加载 global 全局变量 $one 和 $two function sum(){ //在函数内部使用关键字加载 global 全局变量,加载多个使用逗号分隔 global $one, $two; // 使用函数外部声明的全局变量 echo "运算结果:".($one+$two)."<br>"; } sum(); //调用函数 ?>
該程式執行後輸出的結果如下顯示:
运算结果为 30 // 使用 global 关键字就可以加载全局变量在函数内使用
“global”關鍵字是用來導入全域變數的。看起來它工作的很好,而且很簡單,但是還是要對使用“global”關鍵字來定義全域資料而擔心。因為有三個理由:
1、程式碼重用幾乎是不可能的。
如果一個函數依賴全域變量,那麼想在不同的環境中使用這個函數幾乎是不可能的。另外一個問題就是你不能提取出這個函數,然後在其他的程式碼中使用。
2、除錯並解決問題是非常困難的。
追蹤一個全域變數比追蹤一個非全域變數困難的多。一個全域變數可能會在一些不明顯的包含檔案中被重新定義,即使你有一個非常好的程式編輯器(或IDE)來幫助你,你也得花了幾個小時才能發現這個問題所在。
3、理解這些程式碼將是非常困難的事情。
你很難弄清楚一個全域變數是從哪裡來得,它是用來做什麼的。在開發的過程中,你可能會知道知道每一個全域變量,但大概一年之後,你可能會忘記其中至少一般的全域變量,這個時候你會為自己使用那麼多全域變量而懊悔不已。
$GLOBALS
在函數中使用全域變量,除了使用global 關鍵字,還可以使用特殊的php 自訂 $GLOBALS 陣列。前面的例子可以寫成使用 $GLOBALS 取代 global。
程式碼如下顯示:
<?php $one = 10; $two = 20; function sum(){ //在函数内部使用 $GLOBALS 访问全局变量, $GLOBALS["two"] = $GLOBALS["one"] + $GLOBALS["two"]; } sum(); //调用函数 echo $two; ?>
說明: 在 $GLOBALS 陣列中,每個變數是一個元素,鍵名對應變數名,值對應變數的內容。 $GLOBALS 之所以在全域範圍中存在,是因為它是一個超全域變數。
以上就是全域變數的定義以及php變數的範圍裡面的全域變數實例介紹,下一章將介紹什麼是php的static靜態變數。
【相關教學推薦】
3. php實戰影片教學
#以上是什麼是全域變數? php變數的範圍之全域變數實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!