- PHP從入門到精通(第4版)(軟件開發視頻大講堂)
- 明日科技
- 3452字
- 2020-11-28 17:36:29
3.3 PHP的數據類型
PHP支持8種原始類型,包括4種標量類型,即boolean(布爾型)、integer(整型)、float/double(浮點型)和string(字符串型);2種復合類型,即array(數組)和object(對象);2種特殊類型,即resource(資源)與null。
說明
PHP中變量的類型通常不是由程序員設定的,確切地說,是PHP根據該變量使用的上下文在運行時決定的。
3.3.1 標量數據類型
視頻講解:光盤\TM\lx\3\03 標量數據類型.mp4
標量數據類型是數據結構中最基本的單元,只能存儲一個數據。PHP中標量數據類型包括4種,如表3.1所示。
表3.1 標量數據類型

1.布爾型(boolean)
布爾型是PHP中較為常用的數據類型之一,它保存一個true值或者false值,其中true和false是PHP的內部關鍵字。設定一個布爾型的變量,只需將true或者false賦值給變量即可。
【例3.1】通常布爾型變量都是應用在條件或循環語句的表達式中。下面在if條件語句中判斷變量$boo中的值是否為true,如果為true,則輸出“變量$boo為真!”,否則輸出“變量$boo為假!! ”,實例代碼如下:(實例位置:光盤\TM\sl\3\1)
<?php $boo=true; //聲明一個boolean類型變量,賦初值為true if($boo==true) //判斷變量$boo是否為真 echo’變量$boo為真!'; //如果為真,則輸出“變量$boo為真!”的字樣 else echo’變量$boo為假!! '; //如果為假,則輸出“變量$boo為假!! ”的字樣 ?>
結果為:變量$boo為真!
注意
在PHP中不是只有false值才為假的,在一些特殊情況下boolean值也被認為是false。這些特殊情況為0、0.0、"0"、空白字符串("")、只聲明沒有賦值的數組等。
說明
美元符號$是變量的標識符,所有變量都是以$開頭的,無論是聲明變量還是調用變量,都應使用$。
2.字符串型(string)
字符串是連續的字符序列,由數字、字母和符號組成。字符串中的每個字符只占用一個字節。在PHP中,有3種定義字符串的方式,分別是單引號(')、雙引號(")和定界符(<<<)。
單引號和雙引號是經常被使用的定義方式,定義格式如下:
<?php $a =’字符串’; ?>
或
<?php $a ="字符串"; ?>
兩者的不同之處在于,雙引號中所包含的變量會自動被替換成實際數值,而單引號中包含的變量則按普通字符串輸出。
【例3.2】下面的實例分別應用單引號和雙引號來輸出同一個變量,其輸出結果完全不同,雙引號輸出的是變量的值,而單引號輸出的是字符串“$i”。實例代碼如下:(實例位置:光盤\TM\sl\3\2)
<?php $i=’只會看到一遍’; //聲明一個字符串變量 echo"$i"; //用雙引號輸出 echo"<p>"; //輸出段標記 echo'$i'; //用單引號輸出 ?>
運行結果如圖3.1所示。

圖3.1 單引號和雙引號的區別
兩者之間另一處不同點是對轉義字符的使用。使用單引號時,要想輸出單引號,只要對單引號(')進行轉義即可,但使用雙引號(")時,還要注意“"”“$”等字符的使用。這些特殊字符都要通過轉義符“\”來顯示。常用的轉義字符如表3.2所示。
表3.2 轉義字符

\n和\r在Windows系統中沒有什么區別,都可以當作回車符。但在Linux系統中則是兩種效果,在Linux中,\n表示換到下一行,卻不會回到行首;而\r表示光標回到行首,但仍然在本行。如果讀者使用Linux操作系統,可以嘗試一下。
注意
如果對非轉義字符使用了“\”,那么在輸出時,“\”也會跟著一起被輸出。
說明
在定義簡單的字符串時,使用單引號是一個更加合適的處理方式。如果使用雙引號,PHP將花費一些時間來處理字符串的轉義和變量的解析。因此,在定義字符串時,如果沒有特別的要求,應盡量使用單引號。
定界符(<<<)是從PHP 4開始支持的。在使用時后接一個標識符,然后是字符串,最后是同樣的標識符結束字符串。定界符的格式如下:
$string = <<< str 要輸出的字符串 str
其中,str為指定的標識符。
【例3.3】下面使用定界符輸出變量中的值,可以看到,它和雙引號沒什么區別,包含的變量也被替換成實際數值,實例代碼如下:(實例位置:光盤\TM\sl\3\3)
<?php $i=’顯示該行內容’; //聲明變量$i echo <<<std 這和雙引號沒有什么區別,\$i同樣可以被輸出出來。<p> \$i的內容為:$i std; ?>
運行結果如圖3.2所示。

圖3.2 使用定界符定義字符串
注意
結束標識符必須單獨另起一行,并且不允許有空格。在標識符前后有其他符號或字符,也會發生錯誤。
3.整型(integer)
整型數據類型只能包含整數。在32位的操作系統中,有效的范圍是-2147483648~+2147483647。整型數可以用十進制、八進制和十六進制來表示。如果用八進制,數字前面必須加0;如果用十六進制,則需要加0x。
注意
如果在八進制中出現了非法數字(8和9),則后面的數字會被忽略掉。
【例3.4】本例分別輸出八進制、十進制和十六進制的結果,實例代碼如下:(實例位置:光盤\TM\sl\3\4)
<?php $str1=1234567890; //聲明一個十進制的整數 $str2=0x1234567890; //聲明一個十六進制的整數 $str3=01234567890; //聲明一個八進制的整數 $str4=01234567; //聲明另一個八進制的整數 echo ’數字1234567890不同進制的輸出結果:<p>'; echo’十進制的結果是:'.$str1.'<br>'; //輸出十進制整數 echo’十六進制的結果是:'.$str2.'<br>'; //輸出十六進制整數 echo ’八進制的結果是:'; if($str3==$str4){ //判斷$str3和$str4的關系 echo'$str3=$str4='.$str3; //如果相等,輸出變量值 }else{ echo'$str3! =str4'; //如果不相等,輸出“$str3! =$str4” } ?>
運行結果如圖3.3所示。

圖3.3 不同進制的輸出結果
注意
如果給定的數值超出了int型所能表示的最大范圍,將會被當作float型處理,這種情況稱為整數溢出。同樣,如果表達式的最后運算結果超出了int型的范圍,也會返回float型。
4.浮點型(float)
浮點數據類型可以用來存儲數字,也可以保存小數。它提供的精度比整數大得多。在32位的操作系統中,有效的范圍是1.7E-308~1.7E+308。在PHP 4.0以前的版本中,浮點型的標識為double,也叫作雙精度浮點數,兩者沒有區別。
浮點型數據默認有兩種書寫格式,一種是標準格式:
3.1415 -35.8
還有一種是科學記數法格式:
3.58E1 849.72E-3
【例3.5】本例中輸出圓周率的近似值。用3種書寫方法:圓周率函數、傳統書寫格式和科學記數法,最后顯示在頁面上的效果都一樣。實例代碼如下:(實例位置:光盤\TM\sl\3\5)
<?php echo ’圓周率的3種書寫方法:<p>'; echo’第一種:pi()='. pi().'<p>'; //調用pi()函數輸出圓周率 echo’第二種:3.14159265359='.3.14159265359.'<p>'; //傳統書寫格式的浮點數 echo’第三種: 314159265359E-11='.314159265359E-11.'<p>'; //科學記數法格式的浮點數 ?>
運行結果如圖3.4所示。

圖3.4 輸出浮點類型
注意
浮點型的數值只是一個近似值,所以要盡量避免浮點型數值之間比較大小,因為最后的結果往往是不準確的。
3.3.2 復合數據類型
視頻講解:光盤\TM\lx\3\04 復合數據類型.mp4
復合數據類型包括兩種,即數組和對象,如表3.3所示。
表3.3 復合數據類型

1.數組(array)
數組是一組數據的集合,它把一系列數據組織起來,形成一個可操作的整體。數組中可以包括很多數據,如標量數據、數組、對象、資源以及PHP中支持的其他語法結構等。
數組中的每個數據稱為一個元素,元素包括索引(鍵名)和值兩個部分。元素的索引可以由數字或字符串組成,元素的值可以是多種數據類型。定義數組的語法格式如下:
$array = array('value1', ' value2 '…)
或
$array[key] = 'value'
或
$array = array(key1 => value1, key2 => value2…)
其中,key是數組元素的下標,value是數組下標所對應的元素。以下幾種都是正確的格式:
$arr1 = array('This', 'is', 'an', 'example'); $arr2 = array(0 => 'php', 1=>'is', 'the' => 'the', 'str' => 'best '); $arr3[0] = 'tmpname';
聲明數組后,數組中的元素個數還可以自由更改。只要給數組賦值,數組就會自動增加長度。在第7章 PHP數組中,會詳細介紹數組的使用、取值以及數組的相關函數。
2.對象(object)
編程語言所應用到的方法有兩種:面向過程和面向對象。在PHP中,用戶可以自由使用這兩種方法。在第13章中將對面向對象的技術進行詳細的講解。
3.3.3 特殊數據類型
視頻講解:光盤\TM\lx\3\05 特殊數據類型.mp4
特殊數據類型包括資源和空值兩種,如表3.4所示。
表3.4 特殊數據類型

1.資源(resource)
資源類型是PHP 4引進的。關于資源的類型,可以參考PHP手冊后面的附錄,里面有詳細的介紹和說明。
在使用資源時,系統會自動啟用垃圾回收機制,釋放不再使用的資源,避免內存消耗殆盡。因此,資源很少需要手工釋放。
2.空值(null)
空值,顧名思義,表示沒有為該變量設置任何值。另外,空值(null)不區分大小寫,null和NULL效果是一樣的。被賦予空值的情況有以下3種:還沒有賦任何值、被賦值null、被unset()函數處理過的變量。
【例3.6】下面來看一個具體實例。字符串string1被賦值為null, string2根本沒有聲明和賦值,所以也輸出null,最后的string3雖然被賦予了初值,但被unset()函數處理后,也變為null型。unset()函數的作用就是從內存中刪除變量。實例代碼如下:(實例位置:光盤\TM\sl\3\6)
<?php echo "變量(\$string1)直接賦值為null:"; $string1=null; //變量$string1被賦空值 $string3="str"; //變量$string3被賦值str if(! isset($string1)) //判斷$string1是否被設置 echo "string1 = null"; echo "<p>變量(\$string2)未被賦值:"; if(! isset($string2)) //判斷$string2 是否被設置 echo "string2 = null"; echo "<p>被unset()函數處理過的變量(\$string3):"; unset($string3); //釋放$string3 if(! isset($string3)) //判斷$string3是否被設置 echo "string3 = null"; ?>
運行結果如圖3.5所示。

圖3.5 被賦值為null的幾種情況
說明
is_null()函數用于判斷變量是否為null,該函數返回一個boolean型,如果變量為null,則返回true,否則返回false。unset()函數用來銷毀指定的變量。
注意
從PHP 4開始,unset()函數就不再有返回值,所以不要試圖獲取或輸出unset()。
3.3.4 數據類型轉換
視頻講解:光盤\TM\lx\3\06 數據類型轉換.mp4
雖然PHP是弱類型語言,但有時仍然需要用到類型轉換。PHP中的類型轉換和C語言一樣,非常簡單,只需在變量前加上用括號括起來的類型名稱即可。允許轉換的類型如表3.5所示。
表3.5 類型強制轉換

注意
在進行類型轉換的過程中應該注意以下內容:轉換成boolean型時,null、0和未賦值的變量或數組會被轉換為false,其他的為true;轉換成整型時,布爾型的false轉換為0, true轉換為1,浮點型的小數部分被舍去,字符型如果以數字開頭就截取到非數字位,否則輸出0。
類型轉換還可以通過settype()函數來完成,該函數可以將指定的變量轉換成指定的數據類型。
bool settype ( mixed var, string type )
其中,var為指定的變量;type為指定的類型,它有7個可選值,即boolean、float、integer、array、null、object和string。如果轉換成功,則返回true,否則返回false。
當字符串轉換為整型或浮點型時,如果字符串是以數字開頭的,就會先把數字部分轉換為整型,再舍去后面的字符串;如果數字中含有小數點,則會取到小數點前一位。
【例3.7】本例將使用上面的兩種方法將指定的字符串進行類型轉換,比較兩種方法之間的不同。實例代碼如下:(實例位置:光盤\TM\sl\3\7)
<?php $num='3.1415926r*r'; //聲明一個字符串變量 echo ’使用(integer)操作符轉換變量$num類型:'; echo(integer)$num; //使用integer轉換類型 echo '<p>'; echo’輸出變量$num的值:'.$num; //輸出原始變量$num echo '<p>'; echo ’使用settype函數轉換變量$num類型:'; echo settype($num, 'integer'); //使用settype()函數轉換類型 echo '<p>'; echo’輸出變量$num的值:'.$num; //輸出原始變量$num ?>
運行結果如圖3.6所示。

圖3.6 類型轉換
可以看到,使用integer操作符能直接輸出轉換后的變量類型,并且原變量不發生任何變化。使用settype()函數返回的是1,也就是true,而原變量被改變了。在實際應用中,可根據情況自行選擇轉換方式。
3.3.5 檢測數據類型
視頻講解:光盤\TM\lx\3\07 檢測數據類型.mp4
PHP內置了檢測數據類型的系列函數,可以對不同類型的數據進行檢測,判斷其是否屬于某個類型,如果符合則返回true,否則返回false。檢測數據類型的函數如表3.6所示。
表3.6 檢測數據類型的函數

【例3.8】由于檢測數據類型的函數的功能和用法都是相同的,下面使用is_numeric()函數來檢測變量中的數據是否為數字,從而了解并掌握is系列函數的用法。實例代碼如下:(實例位置:光盤\TM\sl\3\8)
<?php $boo="043112345678"; //聲明一個全由數字組成的字符串變量 if(is_numeric($boo)) //判斷該變量是否由數字組成 echo"Yes, the\$boo is a phone number: $boo! "; //如果是,輸出該變量 else echo"Sorry, This is an error! "; //否則,輸出錯誤語句 ?>
結果為:Yes, the $boo is a phone number:043112345678!
- 演進式架構(原書第2版)
- 數據庫程序員面試筆試真題與解析
- 數據庫原理及應用(Access版)第3版
- 微服務與事件驅動架構
- 區塊鏈架構與實現:Cosmos詳解
- Getting Started with SQL Server 2012 Cube Development
- GeoServer Beginner's Guide(Second Edition)
- Mastering JavaScript Design Patterns(Second Edition)
- Natural Language Processing with Java and LingPipe Cookbook
- Hands-On Robotics Programming with C++
- WebStorm Essentials
- Beginning C# 7 Hands-On:The Core Language
- Python趣味創意編程
- H5頁面設計與制作(全彩慕課版·第2版)
- Unity 3D UI Essentials