PHP中的變量
PHP中的類型轉換
PHP中的變量的變量和引用變量
關聯課件: 4子項目四 -PHP中的變量(點擊在線預覽)
4.3.3 PHP中的變量
PHP中預先定義了很多變量,用戶可以随時在腳本中引用。PHP的預定義變量將(jiāng)在後(hòu)面(miàn)的章節進(jìn)行講解,下面(miàn)主要講解自定義變量。
4.3.3.1 變量定義與變量類型
在PHP中一個有效的變量名由字母或者下劃線開(kāi)頭,後(hòu)面(miàn)跟上任意數量的字母、數字或下劃線。PHP的變量屬于松散的數據類型,具體使用時應注意以下幾點。
(1) 變量名要以“$”開(kāi)頭,且區分大小寫。
(2) 變量不必要預先定義或聲明。
(3) 變量在使用時編譯器可動态進(jìn)行類型指定和轉換。
(4) 變量如果未賦值而直接使用,變量值將(jiāng)被視爲空。
提示
最好(hǎo)使用相同的變量命名風格,以免在團隊合作或自己查找錯誤的時候因變量大小的問題,浪費過(guò)多時間,那就得不償失了。變量之間可自由轉換類型,但浮點數轉成(chéng)整數就有點牽強了,可以將(jiāng)浮點數轉換成(chéng)字符串,這(zhè)是很好(hǎo)處理的。
PHP支持8種(zhǒng)原始變量類型,其中包含4種(zhǒng)标量類型、2種(zhǒng)複合類型、2種(zhǒng)特殊類型,如表4-1所示。
下面(miàn),分别介紹這(zhè)8種(zhǒng)變量類型。
1.布爾型(boolean)
布爾型是最簡單的類型,也被稱爲邏輯型,其值非真即假,主要用在條件表達式和邏輯表達式中,用以控制程序流程。要指定一個布爾值,使用關鍵字TRUE或FALSE(兩(liǎng)個都(dōu)不區分大小寫)。其他類型的數據均可以轉換爲布爾型,詳見類型轉換。
2.整型(integer)
整型數的字長(cháng)和平台有關,最大值大約是二十億(32位有符号)。
整型值可以用十進(jìn)制、十六進(jìn)制或八進(jìn)制符号指定,前面(miàn)可以加上可選的符号(-或者+)。要使用八進(jìn)位整數可以在面(miàn)加0(零),要使用16進(jìn)位整數可以在面(miàn)加0x。
$int1=1234 //十進(jìn)制正整數
$int1=-1234 //負整數
$int1=01234 //八進(jìn)制整數
$int1=0x1234 //十六進(jìn)制整數
3.浮點型(double (floating point number))
在32位的操作系統中,它的有效範圍是1.7E-308~1.7E 308,如:
$float1=666.66
$float2=6.6666e2 //表示6.6666乘以10的2次方,爲指數形式的浮點數
值得注意的是,浮點型變量顯示的十進(jìn)制數的位數由php.ini文件中的precision(精度)定義,預定值爲12,即浮點數最長(cháng)占14個字符。
4.字符串(string)
無論是單個字符還(hái)是很長(cháng)的字符串都(dōu)是使用這(zhè)個變量類型。值得注意的是要將(jiāng)指定字符串賦值給字符串變量時,要在頭尾都(dōu)加上雙引号或單引号(例如:"這(zhè)是字符串"或'這(zhè)是字符串')。在PHP中還(hái)提供一些轉義字符,用以表示那些已經(jīng)被程序語法結構占用了的特殊字符,如表4-2所示。
提示
有了PHP變量的理論知識,下面(miàn)來通過(guò)實例來看其具體使用。
<!--文件4-7.php:PHP變量的使用=>布爾型、整型、浮點型、字符串--> <HTML> <HEAD> <TITLE>PHP變量的使用之一</TITLE> </HEAD> <BODY> <?php $string1 = "輸出字符串變量類型的内容!"; echo $string1; //輸出字符串變量“$string1”的内容 echo "<br>"; //輸出換行 $string2 = "輸出特殊字符:"; echo $string2 . ""; echo "$"; echo '''; echo """; echo "x52"; echo "<br>"; $int1=01234; // 八進(jìn)制整數 $int2=0x1234; // 十六進(jìn)制整數 echo "輸出整型變量的值:"; echo $int1; // 輸出668 echo " "; // 輸出一個制表位 echo $int2; // 輸出4660 echo "<br>"; $float1=6.6666e2; echo "輸出浮點型變量的值:"; echo $float1; // 輸出666.66 echo "<br>"; echo "輸出布爾型變量的值:"; echo (boolean)($int1); // 輸出轉換後(hòu)的布爾變量--“1” ?> </BODY> </HTML>
程序4-7.php涉及到了變量類型中的字符串、整型、浮點型、布爾型變量的使用,其運行結果如圖4-7所示。
圖4-7 程序4-7.php的運行結果
5.數組(array)
數組變量可以是一維數組、二維數組或者更多維數組,其中的元素可以爲多種(zhǒng)類型,可以是字符串、整型、浮點型、布爾型,甚至是數組或對(duì)象等。
在PHP中可以使用array()函數來創建數組,也可以直接進(jìn)行賦值。使用array()來創建數組的語法爲:
array( [ key => ] value,
…
)
其中key可以是integer或者string,是以後(hòu)存取的标志。特别地,當爲integer時,沒(méi)有序号意義,value可以是任何值。
用array()函數創建數組的方法如程序4-8.php所示。
<!--文件4-8.php:用array()函數創建PHP數組--> <HTML> <HEAD> <TITLE>用array()函數創建PHP數組</TITLE> </HEAD> <BODY> <?php $arr=array ( 0=>6, 2=>6.666e2, 1=>"我愛PHP", "str"=>"string", ); for ($i=0;$i<count($arr);$i ) { $print=each($arr); echo "$print[value]<br>"; } ?> </BODY> </HTML>
程序中使用for循環用來輸出整個數組。其中函數count()用來計算出數組元素的個數,函數each()返回當前數組指針的索引/值對(duì),在後(hòu)面(miàn)的章節還(hái)將(jiāng)會講到。程序4-8.php的運行結果如圖4-8所示。
圖4-8 程序4-8.php的運行結果
我們也可以采用將(jiāng)給一個一個數組元素賦值的方法,如程序4-9.php所示。
<!--文件4-9.php:逐一給數組元素賦值--> <HTML> <HEAD> <TITLE>逐一給數組元素賦值</TITLE> </HEAD> <BODY> <?php $arr[0]=6; $arr[2]=6.666e2; $arr[1]="我愛PHP"; $arr["str"]="string"; for ($i=0;$i<count($arr);$i ) { $print=each($arr); echo "$print[value]<br>"; } ?> </BODY> </HTML>
使用上面(miàn)這(zhè)種(zhǒng)簡潔方式給數組賦值時,數組的默認下标爲0、1、2、3。程序4-10的運行結果與程序4-8.php的運行結果相同。
PHP中多維數組與一維數組的區别在于多維數組有兩(liǎng)個或多個下标,其用法基是一樣的。程序4-11就是采用逐一給二維數組元素賦值的方法來創建和使用二維數組的。
<!--文件4-11.php:多維數組的逐一賦值法--> <HTML> <HEAD> <TITLE>多維數組的逐一賦值</TITLE> </HEAD> <BODY> <?php $arr[0][0]=6; $arr[0][1]=6.666e2; $arr[1][0]= "我愛PHP"; $arr[1]["str"]="string"; for ($i =0;$i<count($arr);$i ) { for ($j = 0;$j<count($arr[$i]);$j ) { $print=each($arr[$i]); echo "$print[value]<br>"; } } ?> </BODY> </HTML>
其運行結果與程序4-8.php運行結果相同。
還(hái)可以使用層次更明顯、更容易理解和接受的多維數組賦值方式:嵌套的array()函數方式來創建PHP數組并給數組元素賦值,如程序4-12所示。
<!--文件4-12.php:用嵌套的array()函數創建PHP數組--> <HTML> <HEAD> <TITLE>用嵌套array()函數創建PHP數組</TITLE> </HEAD> <BODY> <?php $arr=array ( 0=>array ( 0=>6, 2=>6.666e2, ), //此處應該是“,”,而不是“;” 1=>array ( 0=>"我愛PHP", "str"=>"string" ) ); for ($i =0;$i<count($arr);$i ) { for ($j = 0;$j<count($arr[$i]);$j ) { $print=each($arr[$i]); echo "$print[value]<br>"; } } ?> </BODY> </HTML>
其運行結果與程序4-8.php運行結果相同。
6.對(duì)象(object)
object爲對(duì)象類型變量,是類的具體化實例,第4章會對(duì)其進(jìn)行詳細講解。
7.資源(resource)
資源是一種(zhǒng)特殊變量,其中保存了到外部資源的一個引用。資源是通過(guò)專門的函數來建立和使用的。資源類型變量保存了打開(kāi)文件、數據庫連接、圖形畫布區域等的特殊句柄,在後(hòu)面(miàn)的章節中會陸續學(xué)習到。
8.NULL
NULL類型隻有一個值,就是大小寫敏感的關鍵字NULL,表示一個變量沒(méi)有值。
在下列情況下一個變量的值被認爲是NULL。
(1)被賦值爲NULL。
(2)尚未被賦值。
(3)被unset()(銷毀指定的變量)。
提示
4.3.3.2 變量類型轉換
前面(miàn)已經(jīng)提到過(guò),PHP的變量屬于松散的數據類型,也就是說PHP在變量定義時不需要(或不支持)類 型定義,變量的類型是根據使用該變量的上下文所決定的。如果把一個字符串值賦給變量var,var就成(chéng)了一 個字符串;如果又把一個整型值賦給var,那它就成(chéng)了一個整數。
在PHP中是怎樣處理變量不同類型間的相互轉換的呢?PHP提供了兩(liǎng)種(zhǒng)類型轉換的方法:自動類型轉換 和強制類型轉換。
PHP的自動類型轉換的一個例子是加号“ ”。如果任何一個運算數是浮點數,則所有的運算數都(dōu)被當成(chéng) 浮點數,結果也是浮點數。否則運算數會被解釋爲整數,結果也是整數。注意這(zhè)并沒(méi)有改變這(zhè)些運算數本身 的類型;改變的僅是這(zhè)些運算數如何被求值。也就是說,自動類型轉換并不能(néng)改變變量本身的數據類型,改 變的僅僅是變量作爲運算數時被求值得方式。
PHP中的類型強制轉換和C中的強制類型轉換相似:在要轉換的變量之前加上用括号括起(qǐ)來的目标類型。 允許的強制轉換如下。
(int)或(integer):轉換成(chéng)整型。
(bool)或(boolean):轉換成(chéng)布爾型。
(float)、(double)或(real):轉換成(chéng)浮點型。
(string):轉換成(chéng)字符串。
(array):轉換成(chéng)數組。
(object):轉換成(chéng)對(duì)象。
其使用方法爲:
(int)$變量名或(integer)$變量名
爲了便于理解,現舉例如下。
<!--文件4-13.php:變量類型轉換--> <HTML> <HEAD> <TITLE>變量類型轉換</TITLE> </HEAD> <BODY> <?php $var1 = "0"; //$var1是一個字符串 echo $var1."<br>"; $var2 =$var1 2; //$var2是一個整數 echo $var2."<br>"; $var3 = $var2 1.3; //$var3是一個浮點數 echo $var3."<br>"; $var4 = 5 "10 PHP 5.2"; //整數與字符串相加結果爲正數 echo $var4."<br>"; $var5 = 5 "PHP 5.2"; //整數與字符串相加結果爲正數 echo $var5."<br>"; $var6 = (bool)-2; //-1和其他非零值(不論正負)轉換成(chéng)布爾型,都(dōu)被認爲是TRUE! echo $var6."<br>"; $var7 = 10/3; echo $var7."<br>"; $var8 = (int)$var7; //強制轉換爲整數 echo $var8."<br>"; $var9=1.3e5; $var10 = (float)$var9; //強制轉換爲浮點數 echo $var10."<br>"; $var11 = (string)$var3; echo "$var11的類型爲:".gettype($var11)."<br>"; //gettype()爲獲取變量類型的函數 ?> </BODY> </HTML>
程序4-13.php運行結果如圖4-9所示。
圖4-9 程序4-13.php的運行結果
4-13.php中僅舉例說明了部分類型轉換,轉換爲布爾值時需要注意以下幾點。
當轉換爲boolean時,以下值被認爲是FALSE。
(1)布爾值FALSE。
(2)整型值0(零)。
(3)浮點型值0.0(零)。
(4)空白字符串和字符串"0"。
(5)沒(méi)有成(chéng)員變量的數組。
(6)沒(méi)有單元的對(duì)象(僅适用于PHP 4)。
(7)特殊類型NULL(包括尚未設定的變量)。
所有其他值都(dōu)被認爲是TRUE(包括任何資源)。值得注意的是,-1和其他非零值(不論正負)一樣, 被認爲是TRUE!在求表達式的值和條件判斷時一定要注意!
4.3.3.3 “變量的變量”
“變量的變量”是指在變量的名稱中含有其他變量的一類變量。其實“變量的變量”這(zhè)個名稱并不太準 确,有的地方也稱爲可變變量或動态變量。也就是說,通過(guò)“變量的變量”可以實現動态地設置和使用一個 變量的變量名。通過(guò)程序4-14.php就很容易理解它的使用方法。
<!--文件4-14.php:變量的變量--> <HTML> <HEAD> <TITLE>變量的變量</TITLE> </HEAD> <BODY> <?php $var = 'hello'; $$var = ' world!'; // 定義變量的變量 echo $var.${$var}."<br>"; // 輸出變量的變量 echo $var.$hello; // 輸出變量的變量 ?> </BODY> </HTML>
程序4-14.php的運行結果如圖4-10所示。
圖4-10 程序4-14.php的運行結果
從程序中不難發(fā)現定義變量的方法,如第9行所示輸出或使用變量的變量的方法有兩(liǎng)種(zhǒng),如第10行和11 行,而且這(zhè)兩(liǎng)方法的效果是一樣的。
提示
4.3.3.4 引用變量
PHP中支持引用變量,這(zhè)是從C 語言中借用而來的。對(duì)一個變量進(jìn)行引用産生新變量後(hòu),新變量可以 看作是原變量的一個别名,改變其中任何一個的值,兩(liǎng)個變量的值都(dōu)會發(fā)生改變。使用引用變量的方法是賦 值時在右邊變量前加“&”符号,如程序4-15.pnp所示。
<!--文件4-15.php:引用變量--> <HTML> <HEAD> <TITLE>引用變量</TITLE> </HEAD> <BODY> <?php $int1=8; $int2=&$int1; $int2 ; echo $int1; ?> </BODY> </HTML>
程序4-15.php的運行效果如圖4-11所示。
圖4-11 程序4-15.php的運行結果
引用變量在進(jìn)行賦值時,系統讓新變量和原變量共用一個地址,并沒(méi)有變量複制的操作,所以速度非常 快。如果參數是大數組或對(duì)象,使用引用變量進(jìn)行參數傳遞能(néng)節省内存并加快程序運行速度。不過(guò)其副作用 就是引用值改變,原變量也會發(fā)生改變,因此是否能(néng)使用引用變量進(jìn)行參數傳遞要視具體情況而定。
1.變量特點: 在定義後(hòu)後(hòu)還(hái)可以多次賦值 定義在那個範圍就在那個範圍有效,如函數中定義的變量就隻在函數中有效。 可以通過(guò)unset()銷毀 2.常量特點 常量前面(miàn)面(miàn)沒(méi)有$符号 常量隻能(néng)通過(guò)define()函數定義或者是const關鍵字定義(const定義常量,是在php5.3版本後(hòu)),如 define('PI',3.14)或者const PI=3.14 且值隻能(néng)是标量,即可以是 整型 浮點型 布爾型 null 字符串等。在定義後(hòu),無論在那定義,都(dōu)可以直接調用,沒(méi)有作用域。定義後(hòu)不可以再賦值一直存在内存中,不能(néng)被銷毀。常量的值 不能(néng)是 數組 對(duì)象 資源,可以通過(guò) bool defined() 函數判斷某個常量是否已經(jīng)被定義了。
老師講的很詳細,從中學(xué)到了很多。
對(duì)于PHP變量有了一個基本的了解
還(hái)可以這(zhè)麼(me)玩
這(zhè)些語法基礎對(duì)于剛學(xué)習PHP的人來說是非常重要的,條理清晰,方便學(xué)習
6666
引用變量在進(jìn)行賦值時,系統讓新變量和原變量共用一個地址,并沒(méi)有變量複制的操作,所以速度非常 快。如果參數是大數組或對(duì)象,使用引用變量進(jìn)行參數傳遞能(néng)節省内存并加快程序運行速度。不過(guò)其副作用 就是引用值改變,原變量也會發(fā)生改變,因此是否能(néng)使用引用變量進(jìn)行參數傳遞要視具體情況而定。