php資料類型執行個體詳解

來源:互聯網
上載者:User
PHP 支援 8 種未經處理資料類型。四種標量類型:boolean(布爾型),integer(整型),float(浮點型,也稱作double),string(字串)兩種複合類型:array(數組),object(對象),最後是兩種特殊類型:resource(資源),NULL(無類型)。

Note: 如果想查看某個運算式的值和類型,用var_dump() 函數。如果只是想得到一個易讀懂的類型的表達方式用於調試,用gettype() 函數。要查看某個類型,不要用gettype(),而用is_type 函數。

PHP是弱語言,會根據程式運行環境自動轉換, 在使用 == 號時,如果比較一個數字和字串或者比較涉及到數字內容的字串,則字串會被轉換為數值並且比較按照數值來進行。此規則也適用於 switch 語句。(絕對比較請使用 ===)

第一個運算元類型

第二個運算元類型

類型轉換

整型

浮點型

整型轉換為浮點型

整型

字串

字串轉換為數字,如果字串轉換後是浮點型,整型也會轉換為浮點型

浮點型

字串

字串轉換為浮點型

總結一下就是浮點型 > 整型 > 字串 >布爾類型

  1. Boolean 類型

    當轉換為 boolean 時,以下值被認為是FALSE:

    所有其它值都被認為是 TRUE(包括任何資源)。

    • 布爾值FALSE 本身

    • 整型值 0(零)

    • 浮點型值 0.0(零)

    • Null 字元串,以及字串 "0"

    • 不包括任何元素的數組

    • 不包括任何成員變數的對象(僅 PHP 4.0 適用)

    • 特殊類型 NULL(包括尚未賦值的變數)

    • 從空標記產生的 SimpleXML 對象

  2. Integer類型

    • 整數溢出: 如果給定的一個數超出了integer 的範圍,將會被解釋為float。同樣如果執行的運算結果超出了integer 範圍,也會返回float。

    • PHP 中沒有整除的運算子(這與Java不同)。1/2 產生出 float0.5。值可以捨棄小數部分強制轉換為integer,或者使用round() 函數可以更好地進行四捨五入。

      <?phpvar_dump(25/7);         // float(3.5714285714286) var_dump((int) (25/7)); // int(3)var_dump(round(25/7));  // float(4) ?>
    • 當從浮點數轉換成整數時,將向下取整。

    • Warning

      決不要將未知的分數強制轉換為 integer,這樣有時會導致不可預料的結果。

      <?phpecho (int) ( (0.1+0.7) * 10 ); // 顯示 7!?>
  3. Float 類型

  4. <?php$a = 0.1;$b = 0.9;$c = 1;var_dump(($a+$b)==$c);//truevar_dump(($c-$b)==$a);//falseprintf("%.20f", $a+$b); // 1.00000000000000000000printf("%.20f", $c-$b); // 0.09999999999999997780?>

    出現這個問題是因為浮點數計算涉及精度,當浮點數轉為二進位時有可能會造成精度丟失。

  5. 所以永遠不要相信浮點數已精確到最後一位,也永遠不要比較兩個浮點數是否相等。

  6. 如果確實需要更高的精度,應該使用任意精度數學函數。

  7. 高精度運算的方法如下:bcadd 將兩個高精度數字相加bccomp 比較兩個高精度數字,返回-1,0,1bcp 將兩個高精度數字相除bcmod 求高精度數字餘數bcmul 將兩個高精度數字相乘bcpow 求高精度數字乘方bcpowmod 求高精度數字乘方求模bcscale 配置預設小數點位元,相當於Linux bc中的”scale=”bcsqrt 求高精度數字平方根bcsub 將兩個高精度數字相減
  8. 如上述警告資訊所言,由於內部表達方式的原因,比較兩個浮點數是否相等是有問題的。不過還是有迂迴的方法來比較浮點數值的。

    要測試浮點數是否相等,要使用一個僅比該數值大一丁點的最小誤差值。該值也被稱為機器極小值(epsilon)或最小單元取整數,是計算中所能接受的最小的差別值。

    和在小數點後五位精度內都是相等的。

    <?php$a = 1.23456789;$b = 1.23456780;$epsilon = 0.00001;if(abs($a-$b) < $epsilon) {    echo "true";}?>
  9. String 類型

  10. 如果字串是包圍在雙引號(")中, PHP 將對一些特殊的字元進行解析:如 \n , \\ , \$

  11. 用雙引號定義的字串最重要的特徵是變數會被解析。

  12. 字串用‘.’拼接。

  13. Array

  14. 類型PHP的數組實際上是一個有序映射,映射是一種把values關聯到keys的類型。
    可以用 array() 語言結構來建立一個數組。它接受任意數量用逗號分隔的 鍵(key) => 值(value)對。

  15. array(  key =>  value , ...         )    // 鍵(key)可是是一個整數 integer 或字串 string    // 值(value)可以是任意類型的值    此外 key 會有如下的強制轉換:        <?php        $arr = array(5 => 1, 12 => 2);        $arr[] = 56;    // This is the same as $arr[13] =56; at this point of the script        $arr["x"] = 42; // This adds a new element to the array with key "x"                        unset($arr[5]); // This removes the element fromthe array        unset($arr);    // This deletes the whole array
    • 包含有合法整型值的字串會被轉換為整型。例如鍵名"8" 實際會被儲存為 8。但是 "08" 則不會強制轉換,因為其不是一個合法的十進位數值。

    • 浮點數也會被轉換為整型,意味著其小數部分會被捨去。例如鍵名 8.7 實際會被儲存為 8。

    • 布爾值也會被轉換成整型。即鍵名 true 實際會被儲存為 1 而鍵名 false 會被儲存為 0。

    • Null 會被轉換為空白字串,即鍵名 null 實際會被儲存為 ""。

    • 數組和對象不能被用為鍵名。堅持這麼做會導致警告:Illegal offset type。

    • 如果在數組定義中多個單元都使用了同一個鍵名,則只使用了最後一個,之前的都被覆蓋了。

    • PHP 數組可以同時含有 integer 和 string 類型的鍵名,因為 PHP 實際並不區分索引數組和關聯陣列。

    • 如果對給出的值沒有指定鍵名,則取當前最大的整數索引值,而新的鍵名將是該值加一。

    • 如果指定的鍵名已經有了值,則該值會被覆蓋。

    • 要刪除某索引值對,對其調用 unset() 函數。unset() 函數允許刪除數組中的某個鍵。但要注意數組將不會重建索引。如果需要刪除後重建索引,可以用 array_values() 函數。

  16. foreach 控制結構是專門用於數組的。它提供了一個簡單的方法來遍曆數組。

  17. 數組(Array) 的賦值總是會涉及到值的拷貝。使用引用運算子通過引用來拷貝數組。

  18.  <?php        $arr1 = array(2, 3);        $arr2 = $arr1;        $arr2[] = 4; // $arr2 is changed,// $arr1 is still array(2, 3)               $arr3 = &$arr1;        $arr3[] = 4; // now $arr1 and $arr3 are the same    ?>
  19. NULL
    特殊的 NULL 值表示一個變數沒有值。NULL 類型唯一可能的值就是 NULL。
    在下列情況下一個變數被認為是 NULL:
    1. 被賦值為 NULL。2. 尚未被賦值。3. 被 unset()。
    轉換到 NULL :使用 (unset) $var 將一個變數轉換為 null 將不會刪除該變數或 unset 其值。僅是返回 NULL 值而已。

相關推薦:

PHP資料類型轉換的轉換

解析PHP資料類型之對象(Object)

PHP資料類型之字串類型

PHP資料類型之布爾型變數詳解

php資料類型

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.