PHP Global變數定義一些用法詳解_PHP教程

來源:互聯網
上載者:User
php對global變數的解析是:Global的作用是定義全域變數,但是這個全域變數不是應用於整個網站,而是應用於當前頁面,包括include或require的所有檔案。


代碼如下 複製代碼

$a = 1;
$b = 2;
function Sum()
{
global $a, $b; //在裡面聲明為全域變數
$b = $a + $b;
}
Sum();
echo $b;
?>

結果: 3
如果沒有全域變數global在方法內是不能獲得$a,$b值的,所以在方法裡面想用外面的變數就需要先聲明這個變數為全域變數,這樣就可以使用了

總結:在函數體內定義的PHP Global變數,函數體外可以使用,在函數體外定義的global變數不能在函數體內使用,

$glpbal $a; $a=123; function f() { echo $a; //錯誤, }

再看看下面一例

代碼如下 複製代碼

function f()
{
global $a;
$a=123;
}
f();
echo $a; //正確,可以使用

在使用者自訂函數中,一個局部函數範圍將被引入。任何用於函數內部的變數按預設情況將被限制在局部函數範圍內(包括include 和 require 匯入的檔案內的變數)!
解釋:A.php檔案的內Test_Global是定義好的第三方函數,該函數用include匯入了B.php檔案內的$a的global全域變數,所以$a被限制在Test_Global局部函數範圍內,所以B.php檔案內的$a的作用範圍都在Test_Global內,而不是作用了整個A.php內….
解決方案:
1. 衝出局部函數
//A.php 檔案

代碼如下 複製代碼

function Test_Global()
{
Test();
}
include 'B.php'; //將include 從局部Test_Global函數中移出
$a = 0 ;
Test_Global();
echo $a;
?>
//B.php 檔案
function Test()
{
global $a;
$a =1;
}
?>

2.優秀的訪問器

代碼如下 複製代碼

//A.php 檔案
include 'B.php';
$a =0;
Set_Global($a);
echo $a;
?>
//B.php 檔案
function Set_Global(&$var)
{
$var=1;
}
?>

再來看看$GLOBALS[]

代碼如下 複製代碼


$var1 = 1;
$var2 = 2;
function test1(){
$GLOBALS['var2'] = &$GLOBALS['var1'];
}
test1();
echo $var2; //1

$var3 = 1;
$var4 = 2;
function test2(){
global $var3,$var4;
$var4 = &$var3;
}
test2();
echo $var4;

//2 為什麼$var2的列印結果是1,而$var4的列印結果為2呢?其實就是因為$var3的引用指向了$var4的引用地址。$var4的實際值並沒有改變。官方的解釋是:$GLOBALS['var']是外部的全域變數本身,global $var是外部$var的同名引用或者指標。

也許這個例子還不是很清晰,我再引入一個例子:

代碼如下 複製代碼


$var1 = 1;
function test1(){
unset($GLOBALS['var1']);
}
test1();
var_dump($var1); //NULL

$var2 = 1;
function test2(){
global $var2;
unset($var2);
}
test2();

echo $var2; //1 $var1的值被刪除,而$var2的值還存在。這就證明,$var2隻是別名引用,本身的值沒有受到任何的改變。也就是說global $var其實就是$var = &$GLOBALS['var'],調用外部變數的一個別名而已!

http://www.bkjia.com/PHPjc/631248.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/631248.htmlTechArticlephp對global變數的解析是:Global的作用是定義全域變數,但是這個全域變數不是應用於整個網站,而是應用於當前頁面,包括include或require的所有文...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.