數據類型轉換

  • 數據類型轉換

    • 轉換爲 boolean
      false: false, 0, 0.0, "", "0", 空數組, 空對象, NULL, 未賦值變量
      true: 其他

    • 轉換爲integer(32位最大值約爲20億)
      boolean 轉換:false 產生 0, true 產生 1
      float 轉換:向下取整。如果超出了整數範圍,則結果爲未定義的整型;

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

      <?php
      echo (int) ( (0.1+0.7) * 10 ); // 顯示 7!
      ?>

      string 轉換:如果該字符串沒有包含 '.''e''E' 並且其數字值在整型的範圍之內,該字符串將被當成 integer 來取值。字符串的開始部分決定了它的值。如果該字符串以合法的數值開始,則使用該數值。否則其值爲 0。合法數值由可選的正負號,後面跟着一個或多個數字(可能有小數點),再跟着可選的指數部分。指數部分由 'e''E' 後面跟着一個或多個數字構成。字符串後面不合法值將被忽略;
      從其他類型轉換:沒有定義從其它類型轉換爲整型的行爲。不要依賴任何現有的行爲,因爲它會未加通知地改變

    • 轉換爲 float
      string 轉換:參閱string 轉換爲 integer
      從其他類型轉換:對於其它類型的值,類似於先將值轉換成整型,然後再轉換成浮點。

    • 轉換爲 string
      boolean 轉換:true 轉換爲 "1"false轉換爲 ""
      integerfloat 轉換:轉換爲數字的字面樣式的 string(包括 float 中的指數部分)。使用指數計數法的浮點數(4.1E+6)也可轉換。
      array 轉換:轉換爲字符串 "Array"
      object 轉換:轉換爲字符串 "Object"

      注:
      PHP_EOL:PHP換行符

    • 轉換爲 array
      integerfloatstringbooleanresource 轉換:得到一個僅有一個元素的數組,其下標爲 0,該元素即爲此標量的值。換句話說,(array)$scalarValuearray($scalarValue) 完全一樣。
      object 轉換:結果爲一個數組,其單元爲該對象的屬性,鍵名爲成員變量名。例外:1. 整數屬性不可訪問;2. 私有變量前會加上類名作前綴;3. 保護變量前會加上一個 ‘*’ 做前綴。這些前綴的前後都各有一個 NULL 字符。這會導致一些不可預知的行爲:

      <?php
      class A {
          private $A; // This will become '\0A\0A'
      }
      
      class B extends A {
          private $A; // This will become '\0B\0A'
          public $AA; // This will become 'AA'
      }
      
      var_dump((array) new B());
      ?>

      NULL 轉換:得到一個空數組。

      注:
      如果在數組定義中多個單元都使用了同一個鍵名,則只使用了最後一個,之前的都被覆蓋了。
      數組 key 會有如下的強制轉換:

      • 包含有合法整型值的字符串會被轉換爲整型。例如鍵名 “8” 實際會被儲存爲 8。但是 “08” 則不會強制轉換,因爲其不是一個合法的十進制數值。
      • 浮點數也會被轉換爲整型,意味着其小數部分會被捨去。例如鍵名 8.7 實際會被儲存爲 8。
      • 布爾值也會被轉換成整型。即鍵名 true 實際會被儲存爲 1 而鍵名 false 會被儲存爲 0。
      • Null 會被轉換爲空字符串,即鍵名 null 實際會被儲存爲 “”。
      • 數組和對象不能被用爲鍵名。堅持這麼做會導致警告:Illegal offset type。
    • 轉換爲 object
      object 轉換:不會有任何變化。
      array 轉換:鍵名成爲屬性名並具有相對應的值(數字鍵除外,不迭代就無法被訪問)。
      從其他任何類型轉換:會創建一個內置類 stdClass 的實例。如果該值爲 NULL,則新的實例爲空。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章