1、簡介
php包括8中基本類型,其中4種標量類型boolean(布爾型),integer(整型),float(浮點型),string(字符串),2種複合類型array(數組),object(對象),還有兩種特殊類型resource(資源),null。若是要查看一個變量的值和類型能夠用var_dump();來輸出,若是僅僅想看類型,能夠用gettype()函數,另外要判斷是否是某個類型能夠用is_type()函數(好比is_null($a))。 php
2、布爾類型
布爾型說白了就是真的仍是假的,它只有兩種值,要麼真要麼假。定義也很簡單,只要只要把ture或者false賦值給變量便可。給布爾型變量賦值不區分大小寫,$a=true;$a=TRUE,是等效的。 數組
當轉換爲 boolean 時,如下值被認爲是 FALSE: 函數
除以上之外任何值都是TRUE。 spa
布爾型不須要手工轉換,通常在程序中須要用到布爾型的時候程序會自動轉換 .net
在用布爾型做爲流程控制的時候必定要注意if($a=1) ,if($a==1)以及if($a===1)的區別,=是賦值語句不屬於以上狀況,因此永遠是真,==和===都是比較運算符,前者不檢查類型,後者檢查類型,即類型和值都相同纔會相等。還有要注意的是字符串’0.0′轉換後也是true。 code
3、整型
整型說來了就是整數,包括正整數和負整數,通常的範圍是-231~231-1。 對象
整型值可使用十進制,十六進制或八進制表示,前面能夠加上可選的符號(- 或者 +)。 資源
八進制表示數字前必須加上 0(零),十六進制表示數字前必須加上 0x。下面的代碼都是真確的定義(之後介紹進制之間的轉換): 文檔
3 |
$a = 0123; // 八進制數 (等於十進制 83) |
4 |
$a = 0x1A; // 十六進制數 (等於十進制 26) |
注意:若是向八進制數傳遞了一個非法數字(即 8 或 9),則後面其他數字會被忽略。 字符串
注意:若是給定的一個數超出了 integer 的範圍,將會被解釋爲 float。一樣若是執行的運算結果超出了integer 範圍,也會返回 float。
要將其餘類型轉換成整形能夠經過(int) 或 (integer) 強制轉換,也能夠經過函數intval()來實現。
從布爾類型轉換:FALSE 將產生出 0(零),TRUE 將產生出 1(壹)。
從浮點數轉換:將捨去小數。若是浮點數超出了整數範圍(一般爲 +/- 2.15e+9 = 2^31),則結果不肯定,
從字符串轉換:若是字符串 沒有包含 ‘.’,’e'或’E’ 而且數字值符合整數類型的限定, 這個 字符串 可被認定是一個 整型, 在其它狀況下被認定爲一個float。若是 字符串 以合法的數字開始,這個數字可直接使用。 不然,值就是 0 (零)。 合法數值由符號,後面跟着一個或多個數字(可能有個小數點),再跟着可選的指數符號如’e’ 或 ‘E’,後面跟着一個或多個數字。
運行下面的代碼看看效果吧
03 |
var_dump($large_number); |
06 |
$large_number = 2147483648; |
07 |
var_dump($large_number); |
08 |
//// 輸出爲:float(2147483648) |
10 |
var_dump((int)false); //0 |
11 |
var_dump((int)true); //1 |
12 |
var_dump((int)2.01); //2 |
13 |
var_dump((int)2.01+(int)3.99); //5 |
14 |
var_dump((int)3.99);//3 |
15 |
var_dump((int)(2000000000*2+200000003)); //隨數字變化 |
17 |
var_dump('1.23' > '01.23'); // bool(false) 等價於1>1 |
18 |
var_dump('1.22.00' > '01.23.00'); // bool(true) 等價於1>0 |
19 |
var_dump('1-22-00' > '01-23-00'); // bool(true) 等價於1>0 |
20 |
var_dump((float)'1.22.00' > (float)'01.23.00'); // bool(false)等價於1.22>1.23 |
4、浮點型
浮點型通俗點講就是小數。浮點數的字長和平臺相關,一般最大值是 1.8e308 並具備 14 位十進制數字的精度。一下定義都是真確的:
注意:簡單的十進制分數如同 0.1 或 0.7 不能在不丟失一點點精度的狀況下轉換爲內部二進制的格式。這就會形成混亂的結果:例如,var_dump((int)((0.1+0.7)*10));一般會返回 7 而不是預期中的 8,由於該結果內部的表示實際上是相似 7.9。
這和一個事實有關,那就是不可能精確的用有限位數表達某些十進制分數。例如,十進制的 1/3 變成了0.3。因此永遠不要相信浮點數結果精確到了最後一位,也永遠不要比較兩個浮點數是否相等。
字符串轉換成浮點數和字符串轉換成整數規則相同;對於其它類型的值,其狀況相似於先將值轉換成整型,而後再轉換成浮點。趕忙去試試下面這段神奇的代碼吧。
4 |
var_dump((int)(($a+$b)*10));//結果是7不是8 |
php數據類型(二)
本文固定連接: http://www.qaforcode.net/archives/169 | 豬哥每日一貼