国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

php自訂函數(shù)之變數(shù)作用域

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

函數(shù)定義時(shí)後括號(hào)裡面接的變數(shù)是形式上的參數(shù)(形參),與函數(shù)體外的變數(shù)沒(méi)有任何關(guān)係。只是在函數(shù)內(nèi)部執(zhí)行

函數(shù)內(nèi)宣告的變數(shù)也與函數(shù)外的變數(shù)沒(méi)關(guān)係。

但是,我們實(shí)際的處理情況中會(huì)遇到這樣的一個(gè)情況:

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

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

這個(gè)時(shí)候我們就需要用到超全局變數(shù)。我們來(lái)回顧一下先前的知識(shí)點(diǎn):

得到會(huì)話控制中cookie傳值得到會(huì)話控制中session的值得到檔案上傳的結(jié)果得到get傳值的結(jié)果得到post傳值的結(jié)果
#全域變數(shù)名稱#功能說(shuō)明
#$_COOKIE
#$_SESSION
#$_FILES
#$_GET
$_POST
#######$_REQUEST######即能得到get的傳值結(jié)果,也能得到Post傳值的結(jié)果#############

我們來(lái)透過(guò)實(shí)驗(yàn)來(lái)觀察外部變數(shù)(超全域變數(shù))的特點(diǎn),打破本章開頭我們總結(jié)的規(guī)律:

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

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

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

   </body>
</html>

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

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

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

<?php
$hello = 10;

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

$GLOBALS['hello'] = '我愛(ài)你';

echo $hello;

?>

透過(guò)上例,你會(huì)發(fā)現(xiàn)$變數(shù)名稱是等價(jià)於$ GLOBALS['變數(shù)名'] 。所有的變數(shù)都放到了$GLOBALS裡面了。而$GLOBALS也是全域的。

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

1.透過(guò)$GLOBLAS來(lái)讀取外部變數(shù)

<?php

$one = 10;

function demo(){
   $two = 100;

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

   return $result;

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

?>

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

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

<?php

$hongniu = '我是一個(gè)兵,來(lái)自老百姓';

function test(){

   echo '執(zhí)行了函數(shù)test喲<br />';
   //調(diào)用test()函數(shù),將通過(guò)$GLOBALS['hongniu'],把$hongniu的值改變掉

   $GLOBALS['hongniu'] = '幫助別人很快樂(lè)';
}

test();
//發(fā)現(xiàn)是不是輸出的值變了呀?
echo $hongniu;

?>

透過(guò)上例:我們發(fā)現(xiàn)透過(guò)$GLOBALS['hongniu'],把$hongniu的值改變掉,所以在最後輸出$hongniu的時(shí)候,數(shù)值改變了。

3.透過(guò)$GLOBLAS,在函數(shù)內(nèi)建立全域變數(shù)

<?php

function hello(){

   $GLOBALS['que'] = '提神喝茶更好喲';

   echo '你調(diào)了一下函數(shù)hello<br />';
}

hello();

echo $que;

?>

上例中,我們發(fā)現(xiàn)$que是不存在的,可以呼叫函數(shù)hello()後,在函數(shù)外部可以執(zhí)行echo $que了,能夠看到結(jié)果:提神喝茶更好。我們明白了,函數(shù)內(nèi)聲明的變量,透過(guò)$GLOBALS聲明一個(gè)變量,也能夠顯示出來(lái)。

下面的知識(shí)是【了解】級(jí)別,我們?cè)絹?lái)越少的使用這種方式來(lái)宣告全域變數(shù)了。在函數(shù)內(nèi)使用global關(guān)鍵字後面跟著一個(gè)或多個(gè)變量,就把變數(shù)變成全域變量,格式如下:

global $變數(shù)1[,變數(shù)2,....變數(shù)n ]

在global後面可以跟一個(gè)或多個(gè)變量,變數(shù)用逗號(hào)分開。

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

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

注意:
不可在global 後寫 $變數(shù) = 值。


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

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