4.3.7 變量的作用域
&煙開nbsp; PHP中的變量按其作用域的不同可以分爲若幹種器中(zhǒng)類,如局部變量、全局變量、靜街還态變量、動态變量、引用變量、預定義變量、外部變秒西量等,其中引用變量已經(jīng)講過(gu物她ò)了,預定義變量和外部變量將(jiāng)在第5章講解,爸山下面(miàn)對(duì)前4種(z農花hǒng)變量的進(jìn)行詳細講解。商鄉
4.3.7.1 局部變量與全局變量 &n匠來bsp;
PHP中的變量船海是有作用範圍的,一般情況下,變量的作用域男懂是包含變量的PHP程序塊,也就(jiù)是“<?php算跳”和“?>”之間的代碼或者“{”、“}”之間的代碼。相讀如果其中還(hái)有include線理()或require()函數包含的文件,變量的作用域也可以擴展到這(z從報hè)些文件裡(lǐ)。
在主程序商鐵中定義的變量隻在主程序中有效,在函數中定義的變量隻在函數中有效靜機,在函數之外就(jiù)無效了。
如果要在函數中引用主程序中的變量風關的值,要使用PHP定義的$GLOBALS數組。$G讀公LOBALS數組是一個以變量名爲下标的數組,可以直信要接調用。
還(通和hái)有一種(zhǒng)實現跨域調用功能(nén就暗g)的方法就(jiù)是使用全局變量,值得注區些意的是,PHP中的全局變量并不是對(duì)整睡木個程序都(dōu)可見,在主程序中可以訪問函數中的全局變量,但麗聽是在函數中并不能(néng)訪問主程序的全局變量。其定義的語法爲中西:
global &n土用bsp; $變量名;
隻要將(jiā高服ng)變量定義爲全局變量,以後(hòu)訪問這(zhè)弟紅個變量時(shí)就(jiù)不需要使用$GLOB熱廠ALS數組了。程序4-25.ph喝文p爲就(jiù)全局變量和局部變量使用示例。
<!--文件4-25.php:局部變新和量和全局變量--> <HTML>做物; <HEAD>  市看; <TITLE>局部雪相變量和全局變量</TITLE&議和gt; </HEAD> &l南窗t;BODY>  農河; <?php &nb近對sp;  人會; $var1=6; 錯師 //定義一個局部變量 &n到他bsp; &nb能動sp; echo "定義跳現局部變量$var=".匠謝$var1; 舞舊 inclu和藍de("a.php"); &n鄉能bsp; &n校服bsp; function m知嗎yfun1(){ &nbs場樂p; &n會朋bsp; echo&銀玩nbsp;"<br>在myfun1()函數中輸出局部男街變量"; &nb花笑sp;  明高; echo "微日;$var1=".@$var友間1; &n照話bsp; } &體黃nbsp; &nbs河區p; my離書fun1(); &nb民兵sp; functi家銀on myfun2(){ 朋我 &n分那bsp;  請火; echo&nbs市歌p;"<br>畫短在myfun2()函數中輸出局部變量";  器就; &n事房bsp; e上還cho "$var1理一=".$GLOBALS["var1"]; 月暗  分了; } &多件nbsp; &n訊文bsp; myfu看弟n2(); &n木身bsp; &n謝電bsp; global $var2畫站; &nb愛睡sp; &服這nbsp;$var2=8; 話務  錢術; function myfun信路3(){ &nb讀的sp; &nbs男土p; &nbs美河p; global $var3;  輛得;  來少; &n書身bsp; $var3=9; &拿費nbsp; &nbs爸鐘p; &nbs吃女p; e懂些cho "<br>在my算水fun3()函數中輸出全局變量"; 錢書 &nb水現sp; echo &qu草你ot;$var2=".@$var2."書我<br>"; &影又nbsp; &月月nbsp; echo公家 "$var3=".$var3; &車動nbsp; &裡輛nbsp; } &nbs視家p; my區我fun3(); &綠行nbsp;  通子; echo&音媽nbsp;"<br>在函間金數外輸出全局變量"; 錢飛  行關; echo 麗嗎"$var2=".$var2;  遠男; &n業還bsp; echo "北快; $var3=".$var3; &志村nbsp; ?> </BODY&可理gt; </HTML>
被(bèi)包含的a.php代碼如下:
<!--文件a.php:文件4-25.php所包含的文件--&g章風t; <?php echo "&l一山t;br>在a.php中輸出$var相長的值"; echo&nb和你sp;"$var1=&quo大票t;.$var1; echo "<br>話大;在a.php中的函數中輸出$var的值"技路; function 為拿myfun4(){ echo&n吃路bsp;"$var1=".@$var1;很個 } myfun4(); ?>
程序4-25.php的運行結果如圖4-22區市所示。
圖4-22 程序4光得-25.php的運行結果
4.3.7.2 靜态變量和動态變量
鐵站 靜态變量隻能(néng)用于函數範圍内,它與普從民通局部變量不同之處在于:當該函數運行結束時(shí得來),靜态變量不會(huì)丢失自體話己的值。靜态變量的定義方法爲在變量我微名前加“static”關鍵字。
PHP中的動态變她木量允許一個變量的值作爲另一個變量的變量名讀靜,前提條件是這(zhè)個值要符合變量的命名規則。其通睡實就(jiù)是前面(miàn)學(xué)習過(gu志放ò)的“變量的變量”,之所以在此處再拿出來講解,是爲了與靜态變量相對(duì熱員)應。
程序4-26.php爲靜态變量和動态國年變量示例。
<!--文件4-26.ph近離p:靜态變量與動态變量--> <HTML>民件 <HEAD> &件男nbsp; 醫行 <TITLE&g體下t;靜态變量與動态變量</TITLE> 上司</HEAD> <BODY> &nb冷費sp; <?php &nbs跳請p; 快車 functio兵呢n fun1() &n事歌bsp;  來雪; { 店機 &空費nbsp;  鄉時; $int1=0; &nb湖金sp; &nbs舊錢p; //答的定義普通變量 &外事nbsp; &行大nbsp; &nbs讀會p;echo $in服工t1." "雨火;; &黑妹nbsp; &見筆nbsp; $int1 ; &坐雜nbsp;  藍地; &nb暗數sp; }  物票; 路水 fun1(); &nbs離機p; &n年關bsp; &公人nbsp; 腦看 //輸出0 &n醫但bsp; &nb女舞sp;fun1(); &nb女玩sp; 月離 &nb請都sp; &nb兵麗sp; &n呢路bsp; //輸出還(há我煙i)是0 讀鄉 ec地西ho "<br>*******腦用******<br>"術店;; &nbs也工p; 做員 function&n慢男bsp;fun2() 光中 &好費nbsp;{  我坐; &nb樂地sp; static長可 $int2=0;&話裡nbsp; &nbs來快p; 國遠 //定義靜态變量 城放 &nbs醫內p; 她化echo $int2." 很雜;"; &nbs聽醫p;  兒物; &nbs些好p; $int2 ; &nbs技雜p;  學討; } &子吃nbsp; &n近做bsp;fun2(); &nb吃費sp; 這影 &nbs看鐵p;  雜術; //輸出0 &nb東去sp; &nbs開公p; fun2();&nb市理sp; &n坐為bsp;  科不; 船通 &nbs歌雜p; //物視輸出1 &區關nbsp; 離理 echo &quo分藍t;<br>*************<br&g舊算t;"; &n月森bsp; &n明鐵bsp;$int=6; &來窗nbsp;  問票; $var="事機int"; &nbs商跳p; &女開nbsp;  用小; echo&nbs為個p;$$var; &地小nbsp; &n愛報bsp; &nb體都sp; //輸出看通動态變量  近劇; $$var=公行8; &n不下bsp; echo 拍去;" "南新;.$int; 費筆?> </BODY>厭我 </HTML>
程序4-26.php的運行結果如圖4-23所示。
圖4-23 程序4-26.php的運行結果
得文過(guò)程序4-26.php不難看出靜态變量與普木這通變量的區别,在函數fun2()中靜态變量$int2隻被(bèi)初始化議購了一次,在該函數退出時(shí年費)$int2的值不會(huì)丢失,所以反複調用函數fun2()時(shí),近術$int2的值會(huì)累加家體。
局部和全局作用域(loacal global民服) 在所有函數外定義的變量擁有全局作用域,在函數内部聲明的變量是局部變量,僅南低能(néng)在函數内部訪問。要在一個函數中使用全局變量,需要使你中用global關鍵字。
在用戶自定義函數中,一個局部函數範圍將(jiāng)被(bèi)得村引入。任何用于函數内部的變量按缺省情況將(jiāng)被(bèi)限制在年訊局部函數範圍内。
<!--文件4-26.php:靜态變量資生與動态變量--> 2: <HTML> 學就 3: <HEAD&g內場t; 4: <TITLE>靜态變量與動态變算鐵量</TITLE> 5: </HEAD&g美喝t; 6: <BODY> 7慢裡: <?php 8: functi朋她on fun1() 9: { 10: 行來 $int1=0; 唱拍 //定義普通變量 費多11: echo $in在友t1." 長南;"; 12: 土司 $int1 ; 13: 民爸 } 14: 書刀 fun1(); 海市 //輸出0 15: 相窗 fun1(); 在低 //輸出還(hái)是0 16:算懂 echo "<br>****快習*********<br>這件"; 17: 綠務 function fun2(飛年) 18: { 務為 19: stat湖吃ic $int2=0; /刀兒/定義靜态變量 20: echo 年校$int2."&城空nbsp;"; 21: $int2費愛 ; 22: }歌還 23: fun2(); 街見 //輸照女出0 24: fun2(不服); //輸出1 票吃 25: echo "<br>**錯兵***********<br>"; 數市 26: $int=6; 27: 鐘人$var="int&站也quot;; 28: 遠影 echo $$v現河ar; 場鐘//輸出動态變量 29: $$var=8劇離; 30 echo "學街 ".$int; 3吧城1: ?> 中子 32: </BODY> 校子 33:</HTML> 這(zhè)一部分的代碼務腦測試了一下,很成(chéng)功
這(zhè)些語法基礎對(duì)于剛學(xu來了é)習PHP的人來說(shuō)是非常重要的,條理清晰,長北方便學(xué)習