官术网_书友最值得收藏!

2.4 數(shù)據(jù)類型

在PHP中共有八種原始數(shù)據(jù)類型,包括boolean、string、integer和float四種標(biāo)量數(shù)據(jù)類型,array和object兩種復(fù)合數(shù)據(jù)類型,以及resource和null兩種特殊數(shù)據(jù)類型。

2.4.1 標(biāo)量數(shù)據(jù)類型

標(biāo)量數(shù)據(jù)類型是數(shù)據(jù)結(jié)構(gòu)中最基本的單元,即只能在其中存儲一個數(shù)據(jù)。

在PHP中,可以使用boolean、string、integer和float四種標(biāo)量數(shù)據(jù)類型。

1. boolean

boolean(布爾型)數(shù)據(jù)類型用于存放一個true(真)或false(假)值,其中true和false為PHP的內(nèi)部關(guān)鍵字。

布爾型數(shù)據(jù)類型主要用于應(yīng)用程序的邏輯運算,大多使用在條件控制語句或循環(huán)控制語句的條件表達式中。

說明:在PHP中,不是只有布爾型值false為假,在一些特殊情況下某些非布爾型也會被認(rèn)為是假,如0、0.0、'0'、空白字符串(")和只有聲明卻沒有賦值的數(shù)組等。

【實例2-12(14_Boolean.php)】 定義一個布爾型變量,并使用條件控制語句判斷變量的值,如果為true,則輸出“變量為真”,否則輸出“變量為假”。實例代碼如下。

<?php
  //設(shè)置編碼格式,正確顯示中文
  header("content-Type: text/html; charset=gb2312");
  $boo = true;  //定義一個布爾型變量,并賦值為“true”
  //判斷$boo的值是否為true
  if($boo == true)
    echo'變量$boo為真';  //顯示信息
  else
    echo'變量$boo為假';  //顯示信息
?>

運行結(jié)果如圖2-12所示。

2d12

圖2-12 boolean數(shù)據(jù)類型

2. string

string(字符串型)數(shù)據(jù)類型用于存放一個連續(xù)的字符序列,即由一連串字符組成的字符串,而這些字符可以是數(shù)字、字母、漢字或符號。

p33

【定義字符串】

在PHP中,定義字符串的方法有單引號(')、雙引號(")和界定符(<<<)三種。

(1)單引號。使用單引號定義字符串,即使用一對“'”將字符串的字符包含在內(nèi)。

【實例2-13(15_Single_Quote.php)】 使用單引號定義并輸出一個字符串型變量“this is a string”。實例代碼如下。

<?php
  //設(shè)置編碼格式,正確顯示中文
  header("content-Type: text/html; charset=gb2312");
  //定義一個字符串型變量,并賦值為“this is a string”
  $str = 'this is a string';
  echo $str;  //顯示信息
?>

運行結(jié)果如圖2-13所示。

2d13

圖2-13 單引號定義字符串

(2)雙引號。使用雙引號定義字符串,即使用一對“"”將字符串的字符包含在內(nèi)。

【實例2-14(16_Double_Quote.php)】 使用雙引號定義并輸出一個字符串型變量“this is a string”。實例代碼如下。

<?php
  //設(shè)置編碼格式,正確顯示中文
  header("content-Type: text/html; charset=gb2312");
  //定義一個字符串型變量,并賦值為“this is a string”
  $str = "this is a string";
  echo$str;  //顯示信息
?>

運行結(jié)果如圖2-14所示。

2d14

圖2-14 雙引號定義字符串

雖然使用單引號和雙引號都能夠定義字符串,但是兩者之間在使用上有很大的差異,具體如下。

① 需要轉(zhuǎn)義的字符不同。在單引號定義的字符串中,只需要對單引號“'”進行轉(zhuǎn)義;而在雙引號定義的字符串中,還需要對雙引號“"”、美元符號“$”等關(guān)鍵字符進行轉(zhuǎn)義。

② 變量的輸出方式不同。使用單引號定義的字符串中所包含的變量會按照普通字符串輸出,而使用雙引號定義的字符串中所包含的變量會被自動替換為變量的值。

【實例2-15(17_Single_And_Double.php)】 定義一個字符串型變量“this is a string”,然后分別使用單引號和雙引號兩種方法輸出變量名。實例代碼如下。

<?php
  //設(shè)置編碼格式,正確顯示中文
  header("content-Type: text/html; charset=gb2312");
  //定義一個字符串型變量,并賦值為“this is a string”
  $str = 'this is a string';
  echo '使用單引號輸出:$str';  //顯示信息
  echo '<br/>';  //換行
  echo "使用雙引號輸出:$str";  //顯示信息
?>

運行結(jié)果如圖2-15所示。

2d15

圖2-15 單引號和雙引號兩種輸出的區(qū)別

注意:使用雙引號定義的字符串在執(zhí)行時,會花費時間來處理字符的轉(zhuǎn)義和變量的解析,因此如果在沒有特殊要求的情況下,應(yīng)盡量使用單引號來定義字符串。

(3)界定符。使用界定符定義字符串,即使用“<<<str str; ”將字符串的字符包含在內(nèi),其中str為指定的標(biāo)識符。

【實例2-16(18_Delimiter.php)】 使用界定符定義并輸出一個字符串型變量“this is a string”。實例代碼如下。

<?php
  //設(shè)置編碼格式,正確顯示中文
  header("content-Type: text/html; charset=gb2312");
  //定義一個字符串型變量,并賦值為“this is a string”
  $str = <<<std
  this is a string
std;
  echo$str;  //顯示信息
?>

運行結(jié)果如圖2-16所示。

2d16

圖2-16 界定符定義字符串

注意:標(biāo)識符前如果出現(xiàn)其他符號或字符,會發(fā)生錯誤,因此結(jié)束標(biāo)識符必須單獨另起一行,而且不允許有空格。

3. integer

integer(整型)數(shù)據(jù)類型用于存放整數(shù),并且只能存放整數(shù),存放的整數(shù)可以為正數(shù)或負(fù)數(shù),也可以用十進制、八進制或十六進制來表示。

如果需要用八進制來表示整型,那么數(shù)字的前面必須加上0;而如果需要用十六進制來表示整型,那么數(shù)字的前面必須加上0x。

注意:1. 如果在八進制中出現(xiàn)了非法數(shù)字(8和9),那么非法數(shù)字及其后的所有數(shù)字都會被忽略。

2. 如果數(shù)值超過整型所能表示的最大范圍(32位操作系統(tǒng)中最大的整型數(shù)值為2147483647,64位操作系統(tǒng)中最大的整型數(shù)值為9223372036854775807),就會被當(dāng)作浮點型處理,而這種情況稱為整數(shù)溢出。

【實例2-17(19_Integer.php)】 分別定義并輸出使用不同進制表示的整型變量“1234567890”。實例代碼如下。

<?php
  //設(shè)置編碼格式,正確顯示中文
  header("content-Type: text/html; charset=gb2312");
  //定義一個用十進制表示的整型變量
  $num1 = 1234567890;
  //定義一個用八進制表示的整型變量
  $num2 = 01234567890;
  //定義一個用八進制表示的整型變量
  $num3 = 01234567;
  //定義一個用十六進制表示的整型變量
  $num4 = 0x1234567890;
   //顯示信息
  echo '數(shù)值1234567890不同進制的輸出結(jié)果:<br/>';
  echo '十進制的輸出結(jié)果:'.$num1.'<br/>';
  echo '第一個八進制的輸出結(jié)果:'.$num2.'<br/>';
  echo '第二個八進制的輸出結(jié)果:'.$num3.'<br/>';
  echo '十六進制的輸出結(jié)果:'.$num4;
?>

運行結(jié)果如圖2-17所示。

2d17

圖2-17 不同進制的整型變量

4. float

float(浮點型)數(shù)據(jù)類型用于存放數(shù)值,這個數(shù)值可以是超過整型范圍的整數(shù),也可以是小數(shù)。浮點型數(shù)值的書寫格式有兩種。

(1)標(biāo)準(zhǔn)格式:如3.1415、-34.56。

(2)科學(xué)計數(shù)格式:如3.456E1、987.65E-3。

注意:在PHP中,浮點型數(shù)值只是一個近似值,要盡量避免在浮點型數(shù)值之間進行大小比較,因為比較的結(jié)果往往是不準(zhǔn)確的。

【實例2-18(20_Float.php)】 分別使用標(biāo)準(zhǔn)格式和科學(xué)計數(shù)格式定義并輸出圓周率“3.14159265359”。實例代碼如下。

<?php
  //設(shè)置編碼格式,正確顯示中文
  header("content-Type: text/html; charset=gb2312");
  //用標(biāo)準(zhǔn)格式定義一個浮點型變量
  $num1 = 3.14159265359;
  //用科學(xué)計數(shù)格式定義一個浮點型變量
  $num2 = 314159265359E-11;
  //顯示信息
  echo '圓周率的兩種書寫格式:<br/>';
  echo '標(biāo)準(zhǔn)格式:'.$num1.'<br/>';
  echo '科學(xué)計數(shù)格式:'.$num2;
?>

運行結(jié)果如圖2-18所示。

2d18

圖2-18 不同書寫格式的浮點型變量

2.4.2 復(fù)合數(shù)據(jù)類型

復(fù)合數(shù)據(jù)類型存儲的是按照一定規(guī)則組成的元素類型的數(shù)據(jù)。

在PHP中,可以使用array和object兩種復(fù)合數(shù)據(jù)類型。

1. array

array(數(shù)組)是一組數(shù)據(jù)的集合,即將一系列數(shù)據(jù)組織起來,形成一個可操作的整體,這些數(shù)據(jù)可以是標(biāo)量數(shù)據(jù)、數(shù)組、對象和資源等。

數(shù)組中的每個數(shù)據(jù)都被稱為一個元素。元素包括索引(鍵名)和值兩個部分。而在PHP中索引可以由數(shù)值(數(shù)字索引)或字符串(關(guān)聯(lián)索引)組成,而值則可以是多種數(shù)據(jù)類型。

在PHP中,定義數(shù)組的語法格式有三種。

$array = array('value1', 'value2', …);
$array[key] = 'value';
$array = array(key1 => 'value1', key2 => 'value2', …);

其中,key為數(shù)組元素的索引;value為數(shù)組元素的值。

【實例2-19(21_Array.php)】 分別使用三種方法定義數(shù)組“Array([0] => this [1] => is [2] => an [3] => array)”,并使用print_r()函數(shù)輸出數(shù)組結(jié)構(gòu)。實例代碼如下。

<?php
  //設(shè)置編碼格式,正確顯示中文
  header("content-Type: text/html; charset=gb2312");
  $arr1 = array('this', 'is', 'an', 'array');  //定義一個數(shù)組
  print_r($arr1);  //輸出數(shù)組結(jié)構(gòu)
  echo '<br/>';    //換行
  //定義一個數(shù)組
  $arr2[0] = 'this';
  $arr2[1] = 'is';
  $arr2[2] = 'an';
  $arr2[3] = 'array';
  print_r($arr2);  //輸出數(shù)組結(jié)構(gòu)
  echo '<br/>';    //換行
  //定義一個數(shù)組
  $arr3 = array(0 => 'this', 1 => 'is', 2 => 'an', 3 => 'array'); 
  print_r($arr3);  //輸出數(shù)組結(jié)構(gòu)
?>

運行結(jié)果如圖2-19所示。

2d19

圖2-19 定義數(shù)組

2. object

object(對象)就是一組數(shù)據(jù)和與這組數(shù)據(jù)相關(guān)的操作封裝在一起而形成的一個實體。

對象是面向?qū)ο蟮幕A(chǔ)概念之一,將在第7章面向?qū)ο缶幊讨羞M行詳細(xì)講解。

2.4.3 特殊數(shù)據(jù)類型

在PHP中,可以使用resource和null兩種特殊數(shù)據(jù)類型。

1. resource

resource(資源)是一種特殊變量,又稱為句柄,是對外部資源的一個引用,即需要通過專門的函數(shù)來建立和使用,主要用于文件操作、連接數(shù)據(jù)庫或創(chuàng)建圖形畫布區(qū)域等。

在PHP中,系統(tǒng)會自動啟動垃圾回收機制,即自動釋放不再使用的資源,避免內(nèi)存被消耗殆盡,提高應(yīng)用程序的運行速度。因此,PHP很少需要手工釋放資源。

2. null

null(空值)表示沒有為變量設(shè)置任何值。在PHP中,變量為空值的情況有三種。

(1)在定義變量時,沒有為變量賦任何值。

(2)變量被賦值為空值。

(3)被unset()函數(shù)處理過的變量。

說明:在PHP中,空值不區(qū)分大小寫,即null和NULL的效果是一樣的。

【實例2-20(22_Null.php)】 分別使用三種方法將變量設(shè)置為空值,然后對變量進行檢測,如果為空則輸出“變量為空值”。實例代碼如下。

<?php
  //設(shè)置編碼格式,正確顯示中文
  header("content-Type: text/html; charset=gb2312");
  $null1;  //定義一個變量,但不為其賦值
  if (is_null($null1))    //判斷變量是否為空值
    echo'$null1為空值。<br/>';  //顯示結(jié)果
  $null2 = null;         //定義一個變量,并為其賦空值
  if (is_null($null2))   //判斷變量是否為空值
    echo'$null2為空值。<br/>';  //顯示結(jié)果
  $null3 = '空值';        //定義一個變量,并為其賦“空值”
  unset($null3);         //釋放變量$null3
  if (is_null($null3))    //判斷變量是否為空值
    echo'$null3為空值。';       //顯示結(jié)果
?>

運行結(jié)果如圖2-20所示。

2d20

圖2-20 定義空值

2.4.4 檢測數(shù)據(jù)類型

有時根據(jù)功能要求,需要檢測某個數(shù)據(jù)屬于哪種類型,這時可以通過檢測數(shù)據(jù)類型函數(shù)分別針對不同數(shù)據(jù)類型的數(shù)據(jù)進行檢測,從而判斷該數(shù)據(jù)是否屬于某個數(shù)據(jù)類型,如果符合返回true,否則返回false。

針對上述八種數(shù)據(jù)類型,PHP分別提供了九種基本的檢測數(shù)據(jù)類型的函數(shù)。

(1)is_bool()函數(shù):檢測變量是否屬于布爾型。

(2)is_string()函數(shù):檢測變量是否屬于字符串型。

(3)is_numeric()函數(shù):檢測變量是否是由數(shù)字組成的字符串。

(4)is_integer()函數(shù):檢測變量是否屬于整型。

(5)is_float()函數(shù):檢測變量是否屬于浮點型。

(6)is_null()函數(shù):檢測變量是否為空值。

(7)is_array()函數(shù):檢測變量是否屬于數(shù)組類型。

(8)is_object()函數(shù):檢測變量是否屬于對象類型。

(9)is_resource()函數(shù):檢測變量是否屬于資源類型。

【實例2-21(23_Test_Type.php)】 分別使用檢測數(shù)據(jù)類型函數(shù)檢測布爾型變量、字符串型變量、由數(shù)字組成的字符串型變量、整型變量、浮點型變量、空值和數(shù)組。實例代碼如下。

<?php
  //設(shè)置編碼格式,正確顯示中文
  header("content-Type: text/html; charset=gb2312");
  $boo = true;        //定義一個布爾型變量 
  if (is_bool($boo))    //判斷變量是否屬于布爾型
    echo'$boo為布爾型。<br/>';  //顯示結(jié)果
  $str = '123';         //定義一個字符串型變量
  if (is_string($str))  //判斷變量是否屬于字符串型
    echo'$str為字符串型。<br/>';  //顯示結(jié)果
  //判斷變量是否是由數(shù)字組成的字符串
  if (is_numeric($str))
    //顯示結(jié)果
    echo'$str是由數(shù)字組成的字符串。<br/>';
  $num1 = 123;           //定義一個整型變量
  if (is_integer($str))  //判斷變量是否屬于整型
    echo'$num1為整型。<br/>';                 //顯示結(jié)果
  $num2 = 1.23;         //定義一個浮點型變量
  if (is_float($num2))  //判斷變量是否屬于浮點型
    echo'$float為浮點型。<br/>';               //顯示結(jié)果
  $null;               //定義一個變量,但不為其賦值
  if (is_null($null))  //判斷變量是否為空值
    echo'$null為空值。<br/>';                  //顯示結(jié)果
  $arr = array('this', 'is', 'an', 'array');  //定義一個數(shù)組
  if (is_array($arr))  //判斷變量是否屬于數(shù)組類型
    echo'$arr為數(shù)組。';                       //顯示結(jié)果
?>

運行結(jié)果如圖2-21所示。

2d21

圖2-21 檢測數(shù)據(jù)類型

2.4.5 轉(zhuǎn)換數(shù)據(jù)類型

雖然PHP是一種弱類型的語言,但在實際應(yīng)用中有時仍需要轉(zhuǎn)換數(shù)據(jù)類型。在PHP中,轉(zhuǎn)換數(shù)據(jù)類型的方法有兩種。

(1)在變量前加上括號,并在括號中寫入類型名稱。

(2)使用settype()函數(shù)轉(zhuǎn)換數(shù)據(jù)類型,語法格式如下。

bool settype(mixed $var, string $type);

settype()函數(shù)的返回值為布爾值,即轉(zhuǎn)換成功返回true,否則返回false。其中,$var為需要改變數(shù)據(jù)類型的變量;$type為需要變成的數(shù)據(jù)類型。

【實例2-22(24_Convert_Type.php)】 分別用兩種方法將字符串型變量“123.456”轉(zhuǎn)換為浮點型和整型變量。實例代碼如下。

<?php
  //設(shè)置編碼格式,正確顯示中文
  header("content-Type: text/html; charset=gb2312");
  $str = '123.456';    //定義一個字符串型變量
  $num = (float)$str;   //將字符串型變量轉(zhuǎn)換為浮點型變量
  if (is_float($num))   //判斷變量是否屬于浮點型
    echo'$num為浮點型。<br/>';   //顯示結(jié)果
  echo '$num = '.$num.'<br/>';  //顯示結(jié)果
  //將浮點型變量轉(zhuǎn)換為整型變量
  $boo = settype($num, 'integer');
  if ($boo)            //判斷是否轉(zhuǎn)換成功
    echo'轉(zhuǎn)換成功!<br/>';      //顯示結(jié)果
  else
    echo'轉(zhuǎn)換失敗!<br/>';      //顯示結(jié)果
  if (is_integer($num))  //判斷變量是否屬于整型
    echo'$num為整型。<br/>';    //顯示結(jié)果
  echo '$num = '.$num;         //顯示結(jié)果
?>

運行結(jié)果如圖2-22所示。

2d22

圖2-22 轉(zhuǎn)換數(shù)據(jù)類型

注意:1. 轉(zhuǎn)換數(shù)據(jù)類型時,是從最左邊的一個字符開始進行轉(zhuǎn)換的,并只轉(zhuǎn)換符合要轉(zhuǎn)換類型要求的部分,即如果出現(xiàn)非法字符,非法字符及其后的字符都會被忽略。例如,浮點型變量轉(zhuǎn)換為整型變量時,小數(shù)部分會被舍去;字符串型變量轉(zhuǎn)換為整型或浮點型變量時,如果以數(shù)字開頭就截取到非數(shù)字位,否則為0。

2. 將變量轉(zhuǎn)換成布爾型時,null和0會被轉(zhuǎn)換為false,其他則轉(zhuǎn)換為true;而布爾型變量轉(zhuǎn)換為整型變量時,false轉(zhuǎn)換為0,true轉(zhuǎn)換為1。

主站蜘蛛池模板: 六安市| 丰县| 炎陵县| 长宁县| 通榆县| 库尔勒市| 栖霞市| 齐齐哈尔市| 松原市| 武陟县| 沁阳市| 沽源县| 玛纳斯县| 曲靖市| 上虞市| 姚安县| 辽阳市| 吕梁市| 且末县| 平山县| 华亭县| 丘北县| 河池市| 凌海市| 兰州市| 昌宁县| 绥中县| 宝兴县| 博罗县| 喀什市| 白河县| 岳西县| 沙洋县| 柳河县| 宣武区| 阳江市| 丰都县| 乌拉特中旗| 六枝特区| 体育| 右玉县|