關於 PHP 的資料型別 (一)

周小帥發表於2018-09-24

資料型別

1.  php 中的資料型別:

php 中支援 8 種資料型別

  • 標量型別:boolean(布林型), integer (整型),float (浮點型,也成作 double ), string (字串);
  • 複合型別:array (陣列), object (物件);
  • 特殊型別: resource (資源),NULL (無型別);

2. 分別說一下各型別的特點和平時開發中的注意事項:

1️⃣ boolean:布林型別;

  1. 這是最簡單的型別。boolean 表達了真值,可以為 TRUEFALSE;
  2. 要指定一個布林值,使用常量 TRUE 或者 FALSE ,兩個都不區分大小寫;
  3. 通常運算子所返回的 boolean 值結果會被傳遞給 控制流程;

example1.php

<?php
// == 是一個運算子,它檢測兩個變數是否相等,並返回一個布林值
if ($action == "show_version") {
    echo "The version is 1.23";
}
// 這樣做是不必要的...
if ($show_separators == TRUE) {
    echo "<hr>\n";
}
// ...因為可以使用下面這種簡單的方式:
if ($show_separators) {
    echo "<hr>\n";
}
?>

a> 轉換為布林值

如果需要將一個值轉換成 boolean 值時 , 可以使用 (bool) 或者使用 (boolean) 來強制轉換。
: 一般情況不用強制轉換,因為當運算子,函式或者流程控制結構需要一個 boolean 引數時,該值會自動轉換。
b> 轉換成 boolean 時,需要注意:
以下7中情況轉換的值被認為 FALSE

  1. 布林值 FALSE 本身;
  2. 整型值 0;
  3. 浮點型值 0.0 (零);
  4. 空字串 '', 字串零 '0';
  5. 空陣列 [];
  6. 特殊型別 NULL;
  7. 空標記生成 SimpleXML 物件;

注意

  • 所有其他值都被認為是 TRUE(包括 資源和 NAN);
  • -1 和其他非零值(不論正負)一樣,被認為 true;

 example2.php

<?php
var_dump((bool) "");        // bool(false)
var_dump((bool) 1);         // bool(true)
var_dump((bool) -2);        // bool(true)
var_dump((bool) "foo");     // bool(true)
var_dump((bool) 2.3e5);     // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array());   // bool(false)
var_dump((bool) "false");   // bool(true)
?>

2️⃣ integer (整型):

  • 整型可以是十進位制,十六進位制,八進位制,二進位制標識,前面可以加上可選符號( +,  -);
  • 要使用八進位制,數字前面必須加上 0(零), 要使用十六進位制表達,數字前面必須加上 0x; 要使用二進位制表達,數字前面必須加上 0b;

example3.php

<?php
$a = 1234; // 十進位制數
$a = -123; // 負數
$a = 0123; // 八進位制數 (等於十進位制 83)
$a = 0x1A; // 十六進位制數 (等於十進位制 26)
$a = 0b11111111; // 二進位制數字 (等於十進位制 255)
?>

注意: php7 之前的版本,如果向八進位制數傳遞一個非法數字(89),則後面的數字會被忽略,PHP7之後,會報Parse Error錯誤;
a>  整數溢位:如果給定的一個數超出了 integer 的範圍,將會被解釋為 float; 同樣如果執行的雲端結果超出了 integer 範圍,也會返回 float
b> 轉換為整型:

  • 要明確的將一個值轉換為 integer, 使用 (int)(integer) 強制轉換。
  • 還可以使用 intval() 來將一個值轉換成整型;
  • resource 轉換成 integer 時,結果會是PHP執行時為 resource 分配的唯一資源號;
  • 從布林值轉換:FALSE 將產生出 0(零), TRUE  將產生出 1;
  • 從浮點型轉換:當從浮點數轉換成整數時,將 向下取整
    PHP 7.0.0 起,NaN 和 Infinity 在轉換成 integer 時,不再是 undefined 或者依賴於平臺,而是都會變成零。

注意: 不要將未知的分數轉換為 integert, 有時會導致不可預料的結果;

  • 從字串轉換:當一個字串被當做一個數值來取時,結果和型別如下:
    • 如果字串中沒有 ., eE 且數字值在整型的範圍內,該字串將被當做 integer 來取值。其他情況當做 float 來取值;
    • 字串的開始部分決定了它的值。如果字串以合法的數值開始,則使用該數值;
    • 合法數值:由可選的正負號,後面跟著一個或多個數字(或小數點),再跟著可選的指數部分。指數部分由 'e' 或 'E' 後面跟著一個或多個數字構成。
    • 如果字串 不以 合法的數值開始,則該數值是 0 (零);

example4.php

<?php
$foo = 1 + "10.5";                // $foo is float (11.5)
$foo = 1 + "-1.3e3";              // $foo is float (-1299)
$foo = 1 + "bob-1.3e3";           // $foo is integer (1)
$foo = 1 + "bob3";                // $foo is integer (1)
$foo = 1 + "10 Small Pigs";       // $foo is integer (11)
$foo = 4 + "10.2 Little Piggies"; // $foo is float (14.2)
$foo = "10.0 pigs " + 1;          // $foo is float (11)
$foo = "10.0 pigs " + 1.0;        // $foo is float (11)     
?>

3️⃣float 浮點型:

浮點型(也叫浮點數 float,雙精度數 double 或實數 real);

a> 轉換為浮點型:

  • 將字串轉換成浮點型,和以上字串轉換成整型數值一樣,可以參照以上的描述;
  • 如果將一個物件轉換為浮點型,會報 E_NOTICE 錯誤;
    b> : 浮點數比較:
    浮點型別不能用於判斷兩個數值是否相等 ,因為內部轉二進位制的時候會有損耗;
<?php
$a = 0.1;
$b = 0.7;
//以下程式碼不會進入if 體
if($a + $b == 0.8){
    echo '兩個值相等'
}
?>
本作品採用《CC 協議》,轉載必須註明作者和本文連結
周小帥

相關文章