php global與$GLOBALS
1.php 變數介紹
PHP 中 變數分三類:區域性變數、全域性變數、超全域性變數
1.在函式內部宣告的變數,就是區域性變數,當函式執行完畢,區域性變數就消失了。區域性變數,只能在函式內部使用。
2.在函式外部宣告的變數,就是全域性變數。在 PHP 中,全域性變數,在函式中不能使用,網頁執行完畢,全域性變數消失。
3.系統定義的變數,就是超全域性變數。該變數可以在任何地方直接使用。
超全域性變數 描述 $_GET 主要用來獲取 HTTP GET方式傳遞的資料。 $_POST 主要用來獲取 HTTP POST方式傳遞的資料。 $_REQUEST 主要用來獲取 GET 和 POST 方式傳遞的資料,但是速度相對較慢。 $_SERVER 主要用來獲取伺服器執行環境的相關資訊。 $GLOBALS 主要包含GET、_POST、$_COOKIE 陣列的內容。 $_SESSION 主要獲取伺服器端的會話資訊。 $_COOKIE 主要獲取客戶端的會話資訊。 $_FILES 主要獲取上傳檔案的相關資訊。 $ENV 獲取環境資訊。(不常用)
2.global
從上面可以知道php 中函式體內的區域性變數不能再函式體外使用,函式體外的全域性變數不能再函式體內使用,兩者,老死不相往來,但是php 語言不會這麼二的,PHP global關鍵字發揮著牽線人的作用,使得兩者可以在各自的領域中相互使用。
變數的範圍即它定義的上下文背景(也就是它的生效範圍)。大部分的 PHP 變數只有一個單獨的範圍。這個單獨的範圍跨度同樣包含了 include 和 require 引入的文件。例如:以下是test.php中的程式碼
<?php
$c=123456;
include("global.php");
?>
其中變數$c 為全域性變數
這裡全域性變數 $c 將會在包含檔案 global.php 中生效
其中global.php的程式碼如下
<?php $a = 1; $b = 2; function Sum() { global $c;//來自包含這個檔案的檔案中的變數 global $d; //不能在函式體內宣告全域性變數的同時進行賦值,即不能出現global $d=4;這樣的結構 $d=4; //可以在函式體內宣告建立一個全域性變數,並賦值 global $a; global $b; //在裡面宣告為全域性變數 $a=8;//宣告一個全域性變數,並改變它 $b = $a + $b; echo $c; } Sum(); echo "<br>",$a; echo "<br>",$b,"<br>"; echo $d; ?>
執行test.php檔案
輸出結果為:
123456
8
10
4
總結 :global關鍵字將區域性變數與全域性變數之前的界限取消了 。但是注意在用global關鍵字宣告全域性變數的同時不能對其進行賦值,否則會報錯。
3.$GLOBALS
在 $GLOBALS 陣列中,每一個變數為一個元素,鍵名對應變數名,值對應變數的內容。$GLOBALS 之所以在全域性範圍內存在,是因為 $GLOBALS 是一個超全域性變數。
<?php
$a = 1;
$b = 2;
function Sum(){
$GLOBALS["a"] = $GLOBALS["a"] + $GLOBALS["b"];//定義變數時每個都要定義
}
Sum();
echo $b; //輸出結果為2
?>
注意 $GLOBALS 的寫法,比如變數$a1,寫法為$GLOBALS['a1']。
注意 與global不同的是 $GLOBALS["a"]=某值這種結構是存在的,但是使用時必須嚴格按照$GLOBALS['a1']的形式,不能使用$a1這種方式,在函式體內會顯示$a1未定義。
<?php
$a = 1;
$b = 2;
function Sum()
{
global $c;
$GLOBALS['d']=4;
global $a;
global $b; //注意 在函式體內若以$GLOBALS['b']則在函式體內下面的$b也必須換成這種形式,否則會顯示變數b為定義
$a=8; //在裡面宣告為全域性變數
$b = $a + $b;
echo $c;
}
Sum();
echo "<br>",$a;
echo "<br>",$b,"<br>";
echo $d;
echo "<pre>";
//print_r($GLOBALS);
?>
很簡單,就不多解釋了。。。