1. 程式人生 > >php global與$GLOBALS

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);
?>

很簡單,就不多解釋了。。。