在函數(shù)和類之外聲明的變量是全局變量。全局變量可用在腳本中的其他位置。
函數(shù)變量是自包含的,不會影響主腳本中的變量。
來自主腳本的變量不會在函數(shù)內(nèi)部隱式提供。
看看這個例子:
<?PHP
function foo() {
$bar = "hgci.cn";
}
$bar = "PHP";
foo();
print $bar;
?>
上面的代碼生成以下結(jié)果。
腳本的執(zhí)行從 $ bar =“PHP"
行開始,然后調(diào)用 foo()
函數(shù)。
foo()
將 $ bar
設(shè)置為hgci.cn,然后將控制權(quán)返回到主腳本 $ bar
被打印出來。
函數(shù) foo()
被調(diào)用,并且不知道 $ bar
變量存在于全局作用域中,在其局部作用域創(chuàng)建一個 $ bar
變量。
一旦函數(shù)結(jié)束,所有本地作用域都消失了,離開原來的 $ bar
變量完好無損。
可以在腳本中的任何地方訪問全局變量,無論是內(nèi)部還是外部一個函數(shù)。
在PHP中,在某個函數(shù)之外創(chuàng)建的所有變量,在某種意義上,全局的,因為它們可以通過腳本中的“不在函數(shù)內(nèi)部"的任何其他代碼來訪問。
要在函數(shù)內(nèi)部使用這樣的變量,請寫入字全局,后跟函數(shù)的代碼塊中的變量名。
<?PHP//from w ww.j av a 2 s. c o m
$myGlobal = "Hello there!";
function hello() {
global $myGlobal;
echo "$myGlobal\n";
}
hello(); // Displays "Hello there!"
?>
上面的代碼生成以下結(jié)果。
hello()函數(shù)通過聲明它是全局使用來訪問$ Global變量全局語句。 然后,該函數(shù)可以使用該變量來顯示問候語。
我們不需要在函數(shù)之外創(chuàng)建一個變量來將其用作全局變量??纯聪旅娴哪_本:
<?PHP//w ww. j a v a2 s.c o m
function setup() {
global $myGlobal;
$myGlobal = "Hello there!";
}
function hello() {
global $myGlobal;
echo "$myGlobal\n";
}
setup();
hello(); // Displays "Hello there!"
?>
上面的代碼生成以下結(jié)果。
在此腳本中,首先調(diào)用setup()函數(shù)。它將$ Global變量聲明為全局變量,并給它一個值。
然后調(diào)用hello()函數(shù)。它也將$ myGlobal聲明為全局的,這意味著它現(xiàn)在可以訪問它的值 之前由setup()設(shè)置并顯示它。
$ GLOBALS
數(shù)組可以訪問函數(shù)中的全局變量。在全局范圍中聲明的所有變量都在 $ GLOBALS
數(shù)組中,您可以在腳本中的任何位置訪問。 這里是一個示范:
<?PHP
function foo() {
$GLOBALS["bar"] = "hgci.cn";
}
$bar = "PHP";
foo();
print $bar;
?>
上面的代碼生成以下結(jié)果。
我們可以以同樣的方式讀取變量:
$localbar = $GLOBALS["bar"];
PHP GLOBAL關(guān)鍵字允許在本地訪問變量。
function myfunc() { GLOBAL $foo, $bar, $baz; ++$baz; }
上面的代碼讀取全局變量 $ foo
, $ bar
和 $ baz
。 的 ++ $ baz
行將使$ baz增加1,這將反映在全局范圍中。
我們也可以在同一行上同時聲明多個全局變量,只是分開變量使用逗號:
function myFunction() { global $oneGlobal, $anotherGlobal; }
小心全局變量。如果您在許多不同的地方修改全局變量的值在你的應(yīng)用程序中,它可能使調(diào)試你的代碼很困難。
一般來說,你應(yīng)該避免使用全局變量,除非它是嚴(yán)格必要的。
更多建議: