萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> PHP中全局變量global詳解

PHP中全局變量global詳解

本文章來詳細的介紹關於PHP中全局變量global的方法,有需要了解global函數使用方法的朋友可參考本文章。

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

 代碼如下 復制代碼

<?php
$a = 1;
include 'b.inc';
?>

這裡變量 $a 將會在包含文件 b.inc 中生效。但是,在用戶自定義函數中,一個局部函數范圍將被引入。任何用於函數內部的變量按缺省情況將被限制在局部函數范圍內。例如:

 代碼如下 復制代碼

<?php
$a = 1; /* global scope */

function Test()
{
    echo $a; /* reference to local scope variable */
}

Test();
?>

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

今天就遇到了php 全局變量不起作用的問題.

先上一段簡單的代碼:

 代碼如下 復制代碼 <?php
$a = 0 ;
function Test()
{
    $a =1;
}
Test();
echo $a;
?>

上面的代碼中輸出是0,那是因為函數體Test內$a變量被缺省設置為局部變量,$a的作用域就是在Test內.修改代碼如下

 代碼如下 復制代碼 <?php
$a = 0 ;
function Test()
{
&nbsp;   global $a;//申明函數體Test內使用的$a變量為global全局變量
&nbsp;   $a =1;
}
Test();
echo $a;
?>

申明函數體Test內使用的$a變量為global全局變量後,使得$a的作用全局,所以輸出為1.
上面的實例只是基本的global全局變量知識,下面我們看看復雜點的:

//A.php 文件

 代碼如下 復制代碼

<?php
function Test_Global()
{&nbsp;&nbsp;
    include 'B.php';&nbsp;&nbsp;
    Test();&nbsp;&nbsp;
}&nbsp;&nbsp;

$a = 0 ;
Test_Global();
echo $a;
?>&nbsp;

//B.php 文件

<?php
function Test()
{
&nbsp;   global $a;//申明函數體Sum內使用的$a變量為global全局變量
&nbsp;   $a =1;
}
?>

為什麼輸出的卻是0?!!

在用戶自定義函數中,一個局部函數范圍將被引入。任何用於函數內部的變量按缺省情況將被限制在局部函數范圍內(包括include 和 require 導入的文件內的變量)!
解釋:A.php文件的內Test_Global是定義好的第三方函數,該函數用include導入了B.php文件內的$a的global全局變量,所以$a被限制在Test_Global局部函數范圍內,所以B.php文件內的$a的作用范圍都在Test_Global內,而不是作用了整個A.php內….

解決方案:

1. 沖出局部函數

 代碼如下 復制代碼

//A.php 文件

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

//B.php 文件

<?php
function Test()
{
    global $a;
    $a =1;
}
?>

2.優秀的訪問器

 代碼如下 復制代碼

//A.php 文件
<?php
include 'B.php';&nbsp;
$a =0;
Set_Global($a);
echo $a;
?>&nbsp;

//B.php 文件

<?php
function Set_Global(&$var)
{
    $var=1;
}
?>

copyright © 萬盛學電腦網 all rights reserved