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

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!

主站蜘蛛池模板: 沁源县| 鲁山县| 喜德县| 德庆县| 余江县| 永福县| 通江县| 苏尼特右旗| 钟祥市| 蓝田县| 海伦市| 庐江县| 云和县| 晋江市| 根河市| 乌兰浩特市| 东港市| 论坛| 泊头市| 保定市| 宜州市| 泰州市| 澄城县| 慈利县| 开原市| 德昌县| 新乐市| 临沂市| 武乡县| 敦煌市| 崇义县| 津市市| 琼中| 兴业县| 泾源县| 巴彦淖尔市| 龙州县| 荥经县| 高雄县| 鄂伦春自治旗| 西平县|