我們通過前面的章節(jié)函數(shù)定義部份的學(xué)習(xí)我們知道了幾個(gè)不同的規(guī)矩:
函數(shù)定義時(shí)后括號(hào)里面接的變量是形式上的參數(shù)(形參),與函數(shù)體外的變量沒有任何關(guān)系。僅僅是在函數(shù)內(nèi)部執(zhí)行
函數(shù)內(nèi)聲明的變量也與函數(shù)外的變量沒關(guān)系。
但是,我們實(shí)際的處理情況中會(huì)遇到這樣的一個(gè)情況:
我想在函數(shù)體內(nèi)定義的變量在函數(shù)體外用
我想把函數(shù)體外的變量拿到函數(shù)體內(nèi)來使用
1.通過$GLOBLAS來讀取外部變量:
<?php $one = 10; function demo(){ $two = 100; $result = $two + $GLOBALS['one']; return $result; } //你會(huì)發(fā)現(xiàn)結(jié)果變成了110 echo demo(); ?>
上例中:我們將函數(shù)體外的變量通過$GLOBALS拿到了函數(shù)體使用。所以,打破了函數(shù)外的變量不能在函數(shù)體內(nèi)使用的限定。
2.通過$GLOBLAS,在函數(shù)內(nèi)修改外部變量:
<?php $hongniu = '我是一個(gè)兵,來自老百姓'; function test(){ echo '執(zhí)行了函數(shù)test喲<br />'; //調(diào)用test()函數(shù),將通過$GLOBALS['hongniu'],把$hongniu的值改變掉 $GLOBALS['hongniu'] = '幫助別人很快樂'; } test(); //發(fā)現(xiàn)是不是輸出的值變了呀? echo $hongniu; ?>
上例中:我們發(fā)現(xiàn)通過$GLOBALS['hongniu'],把$hongniu的值改變掉,所以在最后輸出$hongniu的時(shí)候,值發(fā)生了變化。
3.通過$GLOBLAS,在函數(shù)內(nèi)創(chuàng)建全局變量:
<?php function hello(){ $GLOBALS['que'] = '提神喝茶更好喲'; echo '你調(diào)了一下函數(shù)hello<br />'; } hello(); echo $que; ?>
上例中:我們發(fā)現(xiàn)$que是不存在的,可以調(diào)用函數(shù)hello()后,在函數(shù)外部可以執(zhí)行echo $que了,能夠看到結(jié)果:提神喝茶更好。我們明白了,函數(shù)內(nèi)聲明的變量,通過$GLOBALS聲明一個(gè)變量,也能夠顯示出來。
在函數(shù)內(nèi)使用global關(guān)鍵詞后面跟一個(gè)或多個(gè)變量,就把變量變?yōu)榱巳肿兞?,格式如下?/p>
在global后面可以跟一個(gè)或者多個(gè)變量,變量用逗號(hào)分開。
實(shí)際上global是起傳遞參數(shù)的作用,而并非使變量的作用域?yàn)槿帧?/p>
實(shí)例:
<?php $a = 10; $b = 100; function test(){ global $a , $b; echo $a + $b; } //結(jié)果是不是顯示出來了? test(); ?>
上例中:你還可以試試在global關(guān)鍵詞后面跟著未創(chuàng)建的變量,在函數(shù)體內(nèi)定義變量值,修改變量的值試試。其實(shí)與$GLOBALS一樣,只是用法不同而已。
注意:不可在global 后寫 $變量 = 值。
<?php
$foo = 100;
function demo($n){
$n = 10;
}
echo demo($foo).'<br />';
$foo;
?>