PHP中全域變數global詳解_PHP教程

來源:互聯網
上載者:User
本文章來詳細的介紹關於PHP中全域變數global的方法,有需要瞭解global函數使用方法的朋友可參考本文章。

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

代碼如下 複製代碼

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

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

代碼如下 複製代碼

$a = 1; /* global scope */

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

Test();
?>

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

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

先上一段簡單的代碼:

代碼如下 複製代碼
$a = 0 ;
function Test()
{
$a =1;
}
Test();
echo $a;
?>

上面的代碼中輸出是0,那是因為函數體Test內$a變數被預設設定為局部變數,$a的範圍就是在Test內.修改代碼如下

代碼如下 複製代碼
$a = 0 ;
function Test()
{
global $a;//申明函數體Test內使用的$a變數為global全域變數
$a =1;
}
Test();
echo $a;
?>

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

//A.php 檔案

代碼如下 複製代碼

function Test_Global()
{
include 'B.php';
Test();
}

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

//B.php 檔案

function Test()
{
global $a;//申明函數體Sum內使用的$a變數為global全域變數
$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 檔案

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

http://www.bkjia.com/PHPjc/628915.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/628915.htmlTechArticle本文章來詳細的介紹關於PHP中全域變數global的方法,有需要瞭解global函數使用方法的朋友可參考本文章。 變數的範圍即它定義的上下文背景...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.