global語法原理:
在函數(shù)中g(shù)lobal某個外部變量,即傳遞了一個引用進(jìn)來,通俗的說,就是引入了外部變量的值,但是當(dāng)改變引入的變量值時,外部同名變量值也會改變。
如下代碼:
$globalStr = '.net';
function globalTest(){
?global $globalStr;
?$globalStr = 'jb51'.$globalStr;
?unset($globalStr); ? //釋放變量$globalStr,作用范圍為函數(shù)內(nèi)部.,也就是說在函數(shù)內(nèi)部消除掉這個變量; ? ? ? ? ? ? ? ?
}
globalTest();
echo $globalStr;?
最終輸出為jb51.net,也就是說和函數(shù)內(nèi)部同名的外部變量globalStr值也改變了。
但是也有特殊情況。
如下代碼:
$var1 = 1;
$var2 = 2;
function test()
{
global $var1,$var2;
$var1 = &$var2; ? ? //注意這里用的符號&
}
test();
echo $var1
?>
此時這里輸出1.
在這里函數(shù)中將$var2賦值給$var1時用了&符號,指的是不僅賦值了,而且此時$var1和$var2引用的是同一個外部同名變量$var2,也就是說此時$var1引用的外部變量改變?yōu)?var2,不再是$var1.所以此時改變函數(shù)內(nèi)部$var1的值時,外部同名變量$var1的值不會改變,相反,外部同名變量$var2的值會隨著內(nèi)部$var1的值改變而改變,也會隨著內(nèi)部$var2的值改變而改變。也就是說此時外部變量$var2的值有函數(shù)內(nèi)部兩個變量$var1和$var2同時操作;
如下所示:
$var1=1;
$var2=2;
function test(){
global $var1,$var2;
$var1 = &$var2; ?//這部操作之后$var1將失去操作外部同名變量$var1的值得能力而獲得操作外部變量$var2的值的能力;
$var1 = 3;//此時外部變量$var2的值改變?yōu)?
$var2 = 4;//此時外部變量$var2的值改變?yōu)?,也就是兩個內(nèi)部變量操作外部同一個變量了
}
global test();
echo $var1;
echo $var2;
此時輸出的值$var1為1,$var2的值為4.
補(bǔ)充:unset()?銷毀指定的變量,isset()?檢測變量是否設(shè)置 ? ? ? ? 例:isset($var) ? 變量$var不存在或值為NULL,返回FALSE;其余返回TRUE;