有些場合需要全局變量的出現(xiàn)舟肉,如下例子:
<?php
$name="why";//定義變量name,并初始化
function echoName()
{
//試圖引用函數(shù)外面的變量
echo "myname is ".$name."<br>";
}
echoName();
?>
上面的代碼的結(jié)果為:"myname is" 渗饮。而不是期望中的:"myname is why"知纷。因?yàn)楹瘮?shù)沒有傳遞參數(shù)$name的值橘洞,企圖引用外部變量,不會成功办陷。這時候考慮使用global貌夕。
2.于是將上述代碼改為
<?php
global $name="why";//用global聲明的同時賦值
function echoName()
{
//試圖引用函數(shù)外面的變量
echo "myname is ".$name."<br>";
}
echoName();
?>
結(jié)果為:Parse error: syntax error, unexpected '=', expecting ',' or ';' in http:\xxxxxxx.com on line 2也即上述代碼有錯誤。原因是不能在用global聲明變量的同時給變量賦值民镜。
3.再次更改上述代碼:
<?php
global $name;
$name="why";//將global聲明與賦值分開
function echoName()
{
//試圖引用函數(shù)外面的變量
echo "myname is ".$name."<br>";
}
echoName();
?>
但是得到的結(jié)果依然為:"myname is" ,原因是global的用法不對啡专。
global的正確用法是:"在一個函數(shù)中引入外部的一個變量,如果該變量沒有通過參數(shù)傳遞進(jìn)來制圈,那么就通過global引入進(jìn)來们童。" 也就是說,當(dāng)一個函數(shù)引用一個外部變量時鲸鹦,可以在函數(shù)內(nèi)通過global來聲明該變量慧库,這樣該變量就可以在函數(shù)中使用了(相當(dāng)于當(dāng)作參數(shù)傳遞進(jìn)來)。
4.于是進(jìn)一步改動上述代碼:
<?php
$name="why";//定義變量name,并初始化
function echoName()
{
//通過global來聲明$name馋嗜,相當(dāng)于傳遞參數(shù)
global $name;
echo "myname is ".$name."<br>";
}
echoName();
?>
此時得到期望中的結(jié)果:"myname is why"齐板。以上代碼說明,global是起傳遞參數(shù)的作用葛菇,而并非使變量的作用域?yàn)槿帧?/p>
5.以下代碼證明了這一點(diǎn):
<?php
$name="why";//聲明變量$name,并初始化
function echoName1()
{
//在函數(shù)echoName1()里使用global來聲明$name
global $name;
echo "the first name is ".$name."<br>";
}
function echoName2()
{
//在函數(shù)echoName2()里沒有使用global來聲明$name
echo "the second name is ".$name."<br>";
}
echoName1();
echoName2();
?>
結(jié)果為:the first name is whythe second name is上面的結(jié)果說明在函數(shù)echoName2()中甘磨,$name變量仍然是未知的,因?yàn)闆]有用global來聲明熟呛,也就沒有傳遞進(jìn)去宽档。同時也證明了global的作用并不是使變量的作用域?yàn)槿治疽獭>C上庵朝,global的作用就相當(dāng)于傳遞參數(shù),在函數(shù)外部聲明的變量又厉,如果在函數(shù)內(nèi)想要使用九府,就用global來聲明該變量,這樣就相當(dāng)于把該變量傳遞進(jìn)來了覆致,就可以引用該變量了侄旬。當(dāng)然,除了通過上述方法外煌妈,還可以使用全局?jǐn)?shù)組$GLOBALS來解決問題儡羔,在需要用到外部變量的地方,使用$GLOBALS['var']就可以了璧诵。
例:
<?php
$name="why";//定義變量name,并初始化
function echoName()
{
//通過全局?jǐn)?shù)組$GLOBALS來引用外部變量
echo "myname is ".$GLOBALS['name']."<br>";
}
echoName();
?>
得到的結(jié)果為: myname is why 汰蜘。