在真正使用PHP寫項目時會經常用到不同資料類型之間進行轉換,PHP中類型轉換是比較簡單的,隻需要在變量前面加上用括号括起來的資料類型名稱就可以了,資料類型轉換有以下幾種:
轉換類型 | 說明 |
(bool)(boolean) | 轉換為布爾值 |
(string) | 轉換為字元串 |
(int)(integer) | 轉換為整數 |
(float)(double)(real) | 轉換為浮點型 |
(array) | 轉換為數組 |
(object) | 轉換為對象 |
(unset) | 轉換為NULL,也就是删除變量 |
(binary)b字首 | 轉換為二進制字元串 |
除了上面幾種轉換方式還有一個使用
settype()
函數進行轉換
【示例】使用
settype()
函數進行資料類型轉換
<?php
$a = "abc";
$b = 123;
settype( $b, "float");
var_dump($b);
?>
輸出結果為:
float(123)
【方法】
settype()
使用方法
函數内第一個為變量,在上面示例中為
$b
,第二個參數為資料類型,也就是你想将這個變量值轉換為哪種類型,在上面示例中使用的是
float
,在PHP7版本中支援boolean、float、integer、string、null、array、object。注意:此函數隻能傳回布爾值,可用于判斷,類型轉換成功則傳回
true
,轉換失敗則傳回
false
【示例】轉換資料類型的常用方法
<?php
$num = '123abc';
var_dump((integer)$num);
echo '<br>';
var_dump((float)$num);
echo '<br>';
var_dump((string)$num);
?>
輸出結果為:
int(123)
float(123)
string(6) "123abc"
1.轉換為字元串
一個值可以通過在值前面加上
(string)
或者
(strval)
函數來轉換為字元串,在一個需要字元串的表達式中,字元串會自動轉換,在使用函數
echo()
print()
時,或者在一個變量和一個字元串進行比較時,就會發生這種轉型。
print()
類似于
print_r()
。
【示例】
<?php
$str = 'abcdef';
$num = 12345.123;
var_dump((string)$num);
echo '<br>';
if ($str == 'abcdef') {
echo true;
}
?>
string(9) "12345.123"
1
【注意】在進行字元串轉換時應注意以下幾點:
- 一個布爾值被轉換時則會将
轉換成true
,而1
值将會被轉換為空false
這裡空不是NULL,而是空的字元串,這種轉換可以在布爾值和字元串之間随意轉換。""
- 一個整數或者浮點數被轉換字元串,則會轉換為數字的字面樣式的字元串,包括采用科學技術法記錄的浮點數。
- 數組被轉換為字元串
,是以使用函數Aaary
echo()
無法正确的顯示出數組的值,如果想要正确輸出數組中的值則需要采用print()
這種方式進行,也就是讀取數組中值的方法。echo (array('$a'))
- 資源總會被轉換為
結構的字元串,其中1是PHP配置設定給該資源獨有的數字。Resource id#1
- NULL總會被轉換為空的字元串。
2.轉換為整數
想要将一個值轉換為整數,可以使用
(int)
(integer)
進行強制轉換,不過大多數都不需要進行轉換,在使用運算符、函數或者判斷數值需要一個整數值時,值會自動轉換為整數,還可以通過
intval()
函數進行轉換。
【注意】在進行轉換整數時需要注意以下兩點:
- 當要将布爾值轉換為整數時,則會将布爾值中
轉換為true
,1
則會被轉換為false
0
- 當要将浮點數轉換為整數時,将向零取整,如果浮點數超出了整數範圍,則轉換結果變得不容易控制,這裡不建議将未知的浮點數轉換為整數,因為擷取的結果可能不是你想象的那樣哦,還有就是向零取整并不是四舍五入。
<?php
$bool = true;
$float = 10.6111;
$abc = ( 0.1 + 0.7 ) *10;
echo intval($bool);
echo '<br>';
echo intval($float);
echo '<br>';
echo (int)$abc;
?>
1
10
7
這個示例可以看出正常情況下
$abc
運算結果為
8
,但是當轉換為整型後确輸出了
7
,輸出結果不正确,是以在浮點數轉換整數時一定要注意。
3. 轉換為布爾值
想要将一個值轉換為布爾值是比較簡單的,隻需要使用
(bool)
(boolean)
來強制轉換為布爾值即可,大部分情況下是不需要進行轉換的,當使用運算符、函數或者做判斷時都可以自動轉換為布爾值的。
【注意】在轉換布爾值時需要注意下面幾個值轉換則會轉換為
false
-
:整數零0
-
:浮點數零0.0
-
:字元串零"0"
-
:空字元串""
-
:沒有任何值得數組空數組
-
:沒有任何成員變量得對象空對象
-
:特殊類型NULLNULL
-
從沒有任何标記得XML文檔生成得SimpleXML對象
除了以上值所有類型所有值都會轉換為
true
<?php
$array = array();
$int = 1;
$str = "";
var_dump((bool)$array);
echo '<br>';
var_dump((bool)$int);
echo '<br>';
var_dump((bool)$str);
?>
bool(false)
bool(true)
bool(false)
4. 檢測資料類型
在很多時候都需要由程式自動去判斷資料類型,PHP内置了一些檢測資料類型得函數,可以根據不同得類型進行檢測,判斷是否屬于某種類型,如果符合則傳回
true
,如果不符合則傳回
false
。常用得資料類型檢測函數:
檢測函數 | |
is_bool | 檢測變量是否為布爾值 |
is_string | 檢測變量是否為字元串 |
is_float | 檢測變量是否為浮點數 |
is_int | 檢測變量是否為整數 |
is_null | 檢測變量是否為空 |
is_array | 檢測變量是否為數組 |
is_object | 檢測變量是否為對象 |
is_numeric | 檢測變量是否為數字或者是數字組成得字元串 |
is_double |
【示例1】判斷是否為整數
<?php
$int = 100;
if (is_int($int)){
echo '$int'."是整數類型,并且整數值為$int";
}else{
echo '$int'."不是整數類型";
}
?>
$int是整數類型,并且整數值為100
【示例2】判斷是否為浮點數
<?php
$int = 100;
if (is_float($int)){
echo '$int'."是浮點數類型,并且浮點數值為$int";
}else{
echo '$int'."不是浮點數類型";
}
?>
$int不是浮點數類型
【小竈】在測試字元時經常會遇到不知道會輸出什麼類型得值,也不知道自己寫得變量是什麼類型時,可以采用
gettype()
var_dump()
檢視變量或者值得資料類型
-
函數隻輸出值或變量得類型,不會輸出值gettype
-
函數即輸出值也輸出類型var_dump
函數輸出變量類型gettype
<?php
$int = 0.1111;
echo gettype($int);
?>