首頁  >  文章  >  後端開發  >  PHP 中global 和$GLOBALS[]的使用和區別

PHP 中global 和$GLOBALS[]的使用和區別

巴扎黑
巴扎黑原創
2016-11-11 15:00:421239瀏覽

變數的範圍即它定義的上下文背景(也就是它的生效範圍)。大部分的 PHP 變數只有一個單獨的範圍。這個單獨的範圍跨度同樣包含了 include 和 require 所引入的檔案。例如:

 

Php程式碼  

<?php  
$a = 1;  
include &#39;b.inc&#39;;  
?>

這裡變數 $a 將會在包含檔案 b.inc 中生效。但是,在使用者自訂函數中,一個局部函數範圍將被引入。任何用於函數內部的變數按缺省情況將被限制在局部函數範圍內。例如:

Php程式碼  

<?php  
$a = 1; /* global scope */  
  
function Test()  
{  
    echo $a; /* reference to local scope variable */  
}  
  
Test();  
?>

 這個腳本不會有任何輸出,因為 echo 語句引用了一個局部版本的變數 $a,而且在這個範圍內,它並沒有被賦值。你可能注意到 PHP 的全域變數和 C 語言有一點點不同,在 C 語言中,全域變數在函數中自動生效,除非被局部變數覆寫。這可能引起一些問題,有些人可能不小心就改變了一個全域變數。 PHP 中全域變數在函數中使用時必須宣告為 global。

 global 關鍵字 

首先,一個使用 global 的例子:

Example #1 使用 global

在函數中宣告了全域變數 $a 和 $b 之後,對任一變數的所有參考都會指向其全域版本。對於函數能夠宣告的全域變數的最大個數,PHP 沒有限制。

在全域範圍內存取變數的第二個辦法,是用特殊的 PHP 自訂 $GLOBALS 陣列。前面的例子可以寫成:

Example #2 使用$GLOBALS 替代global

Php代碼  

<?php  
$a = 1;  
$b = 2;  
  
function Sum()  
{  
    global $a, $b;  
  
    $b = $a + $b;  
}  
  
Sum();  
echo $b;  
?>

 

 

的內容。 $GLOBALS 之所以在全域範圍內存在,是因為 $GLOBALS 是一個超全域變數。以下範例顯示了超全域​​變數的用處:

Example #3 示範超全域變數和作用域的例子

 

Php程式碼  

<?php  
$a = 1;  
$b = 2;  
  
function Sum()  
{  
    $GLOBALS[&#39;b&#39;] = $GLOBALS[&#39;a&#39;] + $GLOBALS[&#39;b&#39;];  
}  
  
Sum();  
echo $b;//3  
?>

 

global和GLGLGL>GLL$Samaf ]是外在的全域變數本身,global $var是外在$var的同名引用或指標

 

Php程式碼  

<?php  
function test_global()  
{  
    // 大多数的预定义变量并不 "super",它们需要用 &#39;global&#39; 关键字来使它们在函数的本地区域中有效。  
    global $HTTP_POST_VARS;  
  
    echo $HTTP_POST_VARS[&#39;name&#39;];  
  
    // Superglobals 在任何范围内都有效,它们并不需要 &#39;global&#39; 声明。Superglobals 是在 PHP 4.1.0 引入的。  
    echo $_POST[&#39;name&#39;];  
}  
?>

 結果:Notice: Undefined variable: var1 。因為變數var1被unset函數刪除了。

 

Php代碼  

<?php   
$var1 = 1;   
function test(){   
unset($GLOBALS[&#39;var1&#39;]);   
}   
test();   
echo $var1;   
?>

 結果:印出 1

刪除的只是別名引用,本身的數值並沒有受到任何的改變。

global $var其實就是&$GLOBALS['var'],呼叫外部變數的一個別名而已。 

上面程式碼中的$var1和$GLOBALS['var1']是指的相同變數的本身。

PHP的global變數的作用是定義全域變量,但是這個全域變數不是應用於整個網站,而是應用於目前頁面,包括include或require的所有檔案。 

結論:

1.$GLOBALS['var']是外部的全域變數本身 

2.global $var是外部$var的同名引用或指標。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn