首頁  >  文章  >  後端開發  >  php資料型別實例詳解

php資料型別實例詳解

小云云
小云云原創
2018-03-15 13:13:181420瀏覽

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(零)

  • 空字串,以及字串"0"

  • 不包含任何元素的陣列

  • 不包含任何成員變數的物件(僅PHP 4.0 適用)

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

  • #從空標記產生的SimpleXML 物件

  • #Integer類型

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

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

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

    • Warning

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

      <?php
      echo (int) ( (0.1+0.7) * 10 ); // 显示 7!
      ?>
  • Float 類型

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

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

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

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

  • 高精度运算的方法如下:
    bcadd 将两个高精度数字相加
    bccomp 比较两个高精度数字,返回-1,0,1
    bcp 将两个高精度数字相除
    bcmod 求高精度数字余数
    bcmul 将两个高精度数字相乘
    bcpow 求高精度数字乘方
    bcpowmod 求高精度数字乘方求模
    bcscale 配置默认小数点位数,相当于Linux bc中的”scale=”
    bcsqrt 求高精度数字平方根
    bcsub 将两个高精度数字相减
  • 如上述警告訊息所言,由於內部表達方式的原因,比較兩個浮點數是否相等是有問題的。不過還是有迂迴的方法來比較浮點數數值的。

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

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

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

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

  • 用雙引號定義的字串最重要的特徵是變數會被解析。字串用'.'拼接。 values關聯到keys的型別。 ##

    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。

  • # Null 會轉換為空字串,也就是鍵名null 實際上會儲存為""。鍵名。的都被覆寫了。
  • 如果对给出的值没有指定键名,则取当前最大的整数索引值,而新的键名将是该值加一。

  •  如果指定的键名已经有了值,则该值会被覆盖。

  • 要删除某键值对,对其调用 unset() 函数。unset() 函数允许删除数组中的某个键。但要注意数组将不会重建索引。如果需要删除后重建索引,可以用 array_values() 函数。

  • foreach 控制结构是专门用于数组的。它提供了一个简单的方法来遍历数组。

  • 数组(Array) 的赋值总是会涉及到值的拷贝。使用引用运算符通过引用来拷贝数组。   

  •  <?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
        ?>
  • NULL
        特殊的 NULL 值表示一个变量没有值。NULL 类型唯一可能的值就是 NULL。
        在下列情况下一个变量被认为是 NULL:
            1. 被赋值为 NULL。2. 尚未被赋值。3. 被 unset()。
        转换到 NULL :使用 (unset) $var 将一个变量转换为 null 将不会删除该变量或 unset 其值。仅是返回 NULL 值而已。

  • 相关推荐:

    PHP数据类型转换的转换

    解析PHP数据类型之对象(Object)

    PHP数据类型之字符串类型

    PHP数据类型之布尔型变量详解

    php数据类型

    以上是php資料型別實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述:
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn