- PHP從入門到精通(第4版)(軟件開發(fā)視頻大講堂)
- 明日科技
- 1690字
- 2020-11-28 17:36:30
3.5 PHP變量
變量是指在程序執(zhí)行過程中數(shù)值可以變化的量。變量通過一個(gè)名字(變量名)來標(biāo)識(shí)。系統(tǒng)為程序中的每一個(gè)變量分配一個(gè)存儲(chǔ)單元,變量名實(shí)質(zhì)上就是計(jì)算機(jī)內(nèi)存單元的命名。因此,借助變量名即可訪問內(nèi)存中的數(shù)據(jù)。
3.5.1 變量聲明及使用
視頻講解:光盤\TM\lx\3\09 變量聲明及使用.mp4
和很多語言不同,在PHP中使用變量之前不需要聲明變量(PHP 4之前需要聲明變量),只需為變量賦值即可。PHP中的變量名稱用$和標(biāo)識(shí)符表示。標(biāo)識(shí)符由字母、數(shù)字或下劃線組成,并且不能以數(shù)字開頭。另外,變量名是區(qū)分大小寫的。
變量賦值,是指給變量一個(gè)具體的數(shù)據(jù)值,對(duì)于字符串和數(shù)字類型的變量,可以通過“=”來實(shí)現(xiàn)。格式為:
<?php $name = value; ?>
對(duì)變量賦值時(shí),要遵循變量命名規(guī)則。如下面的變量命名是合法的:
<?php $thisCup="oink"; $_Class="roof "; ?>
下面的變量命名則是非法的:
<?php $11112_var=11112; //變量名不能以數(shù)字字符開頭 $@spcn="spcn"; //變量名不能以其他字符開頭 ?>
除了直接賦值外,還有兩種方式可為變量聲明或賦值,一種是變量間的賦值。
【例3.11】變量間的賦值是指賦值后兩個(gè)變量使用各自的內(nèi)存,互不干擾。實(shí)例代碼如下:(實(shí)例位置:光盤\TM\sl\3\11)
<?php $string1="mingribook"; //聲明變量$string1 $string2=$string1; //使用$string1初始化$string2 $string1="mrbccd"; //改變變量$string1的值 echo$string2; //輸出變量$string2的值 ?>
結(jié)果為:mingribook
另一種是引用賦值。從PHP 4開始,PHP引入了“引用賦值”的概念。引用的概念是,用不同的名字訪問同一個(gè)變量內(nèi)容。當(dāng)改變其中一個(gè)變量的值時(shí),另一個(gè)也跟著發(fā)生變化。使用&符號(hào)來表示引用。
【例3.12】在本例中,變量$j是變量$i的引用,當(dāng)給變量$i賦值后,$j的值也會(huì)跟著發(fā)生變化。實(shí)例代碼如下:(實(shí)例位置:光盤\TM\sl\3\12)
<?php $i="mingribook"; //聲明變量$i $j=&$i; //使用引用賦值,這時(shí)$j已經(jīng)賦值為mingribook $i="mrbccd"; //重新給$j賦值 echo$j; //輸出變量$j echo "<br>"; echo$i; //輸出變量$i ?>
結(jié)果為:mrbccd
mrbccd
注意
引用和復(fù)制的區(qū)別在于:復(fù)制是將原變量內(nèi)容復(fù)制下來,開辟一個(gè)新的內(nèi)存空間來保存,而引用則是給變量的內(nèi)容再起一個(gè)名字??梢赃@樣理解,一些文學(xué)愛好者經(jīng)常會(huì)向報(bào)紙、雜志投稿,但一般不會(huì)用真名,而是筆名,這個(gè)筆名就可以看作是一個(gè)引用。
3.5.2 變量作用域
視頻講解:光盤\TM\lx\3\10 變量作用域.mp4
在使用變量時(shí),要符合變量的定義規(guī)則。變量必須在有效范圍內(nèi)使用,如果變量超出有效范圍,則變量也就失去其意義了。變量的作用域如表3.9所示。
表3.9 變量的作用域

在函數(shù)內(nèi)部定義的變量,其作用域?yàn)樗诤瘮?shù),如果在函數(shù)外賦值,將被認(rèn)為是完全不同的另一個(gè)變量。在退出聲明變量的函數(shù)時(shí),該變量及相應(yīng)的值就會(huì)被清除。
【例3.13】本例用于比較在函數(shù)內(nèi)賦值的變量(局部變量)和在函數(shù)外賦值的變量(全局變量),實(shí)例代碼如下:(實(shí)例位置:光盤\TM\sl\3\13)
<?php $example="在……函數(shù)外"; //聲明全局變量 function example(){ $example="……在函數(shù)內(nèi)……"; //聲明局部變量 echo"在函數(shù)內(nèi)輸出的內(nèi)容是:$example.<br>"; //輸出局部變量 } example(); //調(diào)用函數(shù),輸出變量值 echo"在函數(shù)外輸出的內(nèi)容是:$example.<br>"; //輸出全局變量 ?>
運(yùn)行結(jié)果如圖3.9所示。

圖3.9 局部變量的使用
靜態(tài)變量在很多地方都能用到。例如,在博客中使用靜態(tài)變量記錄瀏覽者的人數(shù),每一次用戶訪問和離開時(shí),都能夠保留目前瀏覽者的人數(shù)。在聊天室中也可以用靜態(tài)變量來記錄用戶的聊天內(nèi)容。
【例3.14】下面使用靜態(tài)變量和普通變量同時(shí)輸出一個(gè)數(shù)據(jù),查看一下兩者的功能有什么不同。實(shí)例代碼如下:(實(shí)例位置:光盤\TM\sl\3\14)
<?php function zdy (){ static$message=0; //初始化靜態(tài)變量 $message+=1; //靜態(tài)變量加1 echo$message.""; } //輸出靜態(tài)變量 function zdy1(){ $message=0; //聲明函數(shù)內(nèi)部變量(局部變量) $message+=1; //局部變量加1 echo$message.""; } //輸出局部變量 for($i=0; $i<10; $i++) zdy(); //輸出1~10 echo "<br>"; for($i=0; $i<10; $i++) zdy1(); //輸出10個(gè)1 echo "<br>"; ?>
運(yùn)行結(jié)果如圖3.10所示。

圖3.10 比較靜態(tài)變量和普通變量的區(qū)別
自定義函數(shù)zdy()是輸出從1~10共10個(gè)數(shù)字,而zdy1()函數(shù)輸出的是10個(gè)1。自定義函數(shù)zdy()含有靜態(tài)變量,而函數(shù)zdy1()是一個(gè)普通變量。初始化都為0,再分別使用for循環(huán)調(diào)用兩個(gè)函數(shù),結(jié)果是靜態(tài)變量的函數(shù)zdy()在被調(diào)用后保留了$message中的值,而靜態(tài)變量的初始化只是在第一次遇到時(shí)被執(zhí)行,以后就不再對(duì)其進(jìn)行初始化操作了,將會(huì)略過第3行代碼不執(zhí)行;而普通變量的函數(shù)zdy1()在被調(diào)用后,其變量$message失去原來的值,重新被初始化為0。
全局變量可以在程序中的任何地方訪問,但是在用戶自定義函數(shù)內(nèi)部是不可用的。想在用戶自定義函數(shù)內(nèi)部使用全局變量,要使用global關(guān)鍵字聲明。
【例3.15】在自定義函數(shù)中輸出局部變量和全局變量的值。實(shí)例代碼如下:(實(shí)例位置:光盤\TM\sl\3\15)
<?php $hr="黃蓉"; //聲明全局變量$hr function lxt(){ $gj="郭靖"; //聲明局部變量$gj echo$gj."<br>"; //輸出局部變量的值 global$hr; //利用關(guān)鍵字global在函數(shù)內(nèi)部定義全局變量 echo$hr."<br>"; //輸出全局變量的值 } lxt(); ?>
結(jié)果為:郭靖
黃蓉
3.5.3 可變變量
視頻講解:光盤\TM\lx\3\11 可變變量.mp4
可變變量是一種獨(dú)特的變量,它允許動(dòng)態(tài)改變一個(gè)變量名稱。其工作原理是該變量的名稱由另外一個(gè)變量的值來確定,實(shí)現(xiàn)過程就是在變量的前面再多加一個(gè)美元符號(hào)“$”。
【例3.16】下面使用可變變量動(dòng)態(tài)改變變量的名稱。首先定義兩個(gè)變量$a和$b,并且輸出變量$a的值,然后使用可變變量來改變變量$a的名稱,最后輸出改變名稱后的變量值,實(shí)例代碼如下:(實(shí)例位置:光盤\TM\sl\3\16)
<?php $a="b"; //聲明變量$a $b="我喜歡PHP"; //聲明變量$b echo$a; //輸出變量$a echo "<br>" ; echo$$a; //通過可變變量輸出$b的值 ?>
結(jié)果為:b
我喜歡PHP
3.5.4 PHP預(yù)定義變量
視頻講解:光盤\TM\lx\3\12 PHP預(yù)定義變量.mp4
PHP提供了很多非常實(shí)用的預(yù)定義變量,通過這些預(yù)定義變量可以獲取用戶會(huì)話、用戶操作系統(tǒng)的環(huán)境和本地操作系統(tǒng)的環(huán)境等信息。常用的預(yù)定義變量如表3.10所示。
表3.10 預(yù)定義變量

- 數(shù)據(jù)庫系統(tǒng)原理及MySQL應(yīng)用教程(第2版)
- Drupal 8 Blueprints
- Apache Spark 2.x Machine Learning Cookbook
- Visual C++串口通信技術(shù)詳解(第2版)
- Instant QlikView 11 Application Development
- 你不知道的JavaScript(中卷)
- PhoneGap Mobile Application Development Cookbook
- Android開發(fā):從0到1 (清華開發(fā)者書庫)
- C/C++程序員面試指南
- Go語言編程
- Clojure for Java Developers
- Orchestrating Docker
- 交互設(shè)計(jì)師成長手冊(cè):從零開始學(xué)交互
- 計(jì)算機(jī)程序的構(gòu)造和解釋(JavaScript版)
- Mastering R for Quantitative Finance