亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

php自定義函數(shù)之變量作用域

我們通過前面的章節(jié)函數(shù)定義部份的學(xué)習(xí)我們知道了幾個不同的規(guī)矩:

函數(shù)定義時后括號里面接的變量是形式上的參數(shù)(形參),與函數(shù)體外的變量沒有任何關(guān)系。僅僅是在函數(shù)內(nèi)部執(zhí)行

函數(shù)內(nèi)聲明的變量也與函數(shù)外的變量沒關(guān)系。

但是,我們實際的處理情況中會遇到這樣的一個情況:

我想在函數(shù)體內(nèi)定義的變量在函數(shù)體外用

我想把函數(shù)體外的變量拿到函數(shù)體內(nèi)來使用

這個時候我們就需要用到超全局變量。我們來回顧一下之前的知識點:

全局變量名功能說明
$_COOKIE得到會話控制中cookie傳值
$_SESSION得到會話控制中session的值
$_FILES得到文件上傳的結(jié)果
$_GET得到get傳值的結(jié)果
$_POST得到post傳值的結(jié)果
$_REQUEST即能得到get的傳值結(jié)果,也能得到Post傳值的結(jié)果

我們來通過實驗來觀察 一下外部變量(超全局變量)的特點,打破本章開頭我們總結(jié)的規(guī)律:

我們定義一下global.html頁現(xiàn)來寫HTML內(nèi)容:

<html>
   <head>
       <title>超全局?jǐn)?shù)組實驗</title>
   </head>
   <body>
       <!--先用POST來實驗,以后你可以改成GET喲 -->
       <form action="glob.php" method="post">
           <input type="text" name="hongniu" /><br />

           <input type="submit" value="提交" />
       </form>

   </body>
</html>

我們將html的內(nèi)容通過form表單提交給了glob.php頁面,我們現(xiàn)在來寫glob.php:

<?php 
function demo(){ 
echo $_POST['hongniu']; 
} 
demo(); 
?>

通過這個小例子,你會發(fā)現(xiàn)超全局的$_POST等這一系列的超全局變量(外部變量)在函數(shù)內(nèi)部也是可以用的。沒有本文開始處變量作用域的限制。其實我們所有聲明的變量都放到了$GLOBALS這個數(shù)組下面,舉個例子:

<?php
$hello = 10;

echo $GLOBALS['hello'].'<br />';

$GLOBALS['hello'] = '我愛你';

echo $hello;

?>

通過上例,你會發(fā)現(xiàn)$變量名是等價于$GLOBALS['變量名'] 。所有的變量都放到了$GLOBALS里面了。而$GLOBALS也是全局的。

因此,我們能夠來達(dá)到我們的目的:將函數(shù)體內(nèi)的變量(局部變量)在函數(shù)外部使用。也可以讓函數(shù)外的變量到函數(shù)里面來使用。

1.通過$GLOBLAS來讀取外部變量

<?php

$one = 10;

function demo(){
   $two = 100;

   $result = $two + $GLOBALS['one'];

   return $result;

}
//你會發(fā)現(xiàn)結(jié)果變成了110
echo demo();

?>

上例中:我們將函數(shù)體外的變量通過$GLOBALS拿到了函數(shù)體使用。所以,打破了函數(shù)外的變量不能在函數(shù)體內(nèi)使用的限定。

2.通過$GLOBLAS,在函數(shù)內(nèi)修改外部變量

<?php

$hongniu = '我是一個兵,來自老百姓';

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的時候,值發(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聲明一個變量,也能夠顯示出來。

下面的知識是【了解】級別,我們越來越少的使用這種方式來聲明全局變量了。在函數(shù)內(nèi)使用global關(guān)鍵詞后面跟一個或多個變量,就把變量變?yōu)榱巳肿兞?,格式如下?/p>

global $變量1[,變量2,....變量n]

在global后面可以跟一個或者多個變量,變量用逗號分開。

<?php
$a = 10;
$b = 100;
function test(){
   global $a , $b;
   echo $a + $b;
}
//結(jié)果是不是顯示出來了?
test();
?>

上例中,你還可以試試在global關(guān)鍵詞后面跟著未創(chuàng)建的變量,在函數(shù)體內(nèi)定義變量值,修改變量的值試試。其實與$GLOBALS一樣,只是用法不同而已。

注意:
不可在global 后寫 $變量 = 值。


global
讀音:[?gl??bl]
解釋:全局的,全球的

繼續(xù)學(xué)習(xí)
||
<?php function hello(){ $GLOBALS['que'] = '提神喝茶更好喲'; echo '你調(diào)了一下函數(shù)hello<br />'; } hello(); echo $que; ?>
提交重置代碼