1. php
中的資料型別:
php
中支援 8 種資料型別
- 標量型別:
boolean
(布林型),integer
(整型),float
(浮點型,也成作double
),string
(字串);- 複合型別:
array
(陣列),object
(物件);- 特殊型別:
resource
(資源),NULL
(無型別);
2. 分別說一下各型別的特點和平時開發中的注意事項:
1️⃣ boolean
:布林型別;
- 這是最簡單的型別。
boolean
表達了真值,可以為TRUE
或FALSE
;- 要指定一個布林值,使用常量
TRUE
或者FALSE
,兩個都不區分大小寫;- 通常運算子所返回的
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
- 布林值
FALSE
本身;- 整型值
0
;- 浮點型值
0.0
(零);- 空字串
''
, 字串零'0'
;- 空陣列
[]
;- 特殊型別
NULL
;- 空標記生成
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
之前的版本,如果向八進位制數傳遞一個非法數字(8
或 9
),則後面的數字會被忽略,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
, 有時會導致不可預料的結果;
- 從字串轉換:當一個字串被當做一個數值來取時,結果和型別如下:
- 如果字串中沒有
.
,e
或E
且數字值在整型的範圍內,該字串將被當做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 '兩個值相等'
}
?>