基本概念
在PHP中定義變量是不支持指定類型的束凑,而是在其賦值后根據(jù)內(nèi)容自動(dòng)處理慧妄。
比如一個(gè)變量,給其賦值一個(gè)字符串展父,那么這個(gè)變量就是字符串類型的返劲,隨后又將其值改成一個(gè)整數(shù)型,那么這個(gè)變量也會(huì)自動(dòng)變成整數(shù)型的變量栖茉。
在計(jì)算中篮绿,如果有一個(gè)變量是
float
類型,那么整個(gè)計(jì)算結(jié)果也將會(huì)是float
類型吕漂。
原始類型
PHP中一共有 9種 原始數(shù)據(jù)類型
-
標(biāo)量類型
- boolean(布爾值)
- integer(整數(shù)型)
- float(浮點(diǎn)型亲配,也叫double)
- string(字符串)
-
復(fù)合類型
- array(數(shù)組)
- object(對(duì)象)
- callable(可調(diào)用類型,如同callback回調(diào)函數(shù))
-
特殊類型
- resource(資源)
- null(無(wú)類型)
文檔類型
還有一些常用于文檔上的偽類型惶凝,它們并不是PHP的原生類型吼虎,只是用于文檔上方便人們理解而產(chǎn)生的類型,所以不能在PHP里使用
mixed(說(shuō)明參數(shù)可以是多種類型的數(shù)據(jù))
number(說(shuō)明參數(shù)是一個(gè)
integer
或float
)callback(說(shuō)明參數(shù)是一個(gè)回調(diào)函數(shù))
array|object(說(shuō)明參數(shù)可以是
array
或object
)void(作為返回值時(shí)表示返回值時(shí)無(wú)用的苍鲜,作為參數(shù)時(shí)表示不接受任何參數(shù))
...(說(shuō)明函數(shù)可以接受任意數(shù)量的參數(shù))
判斷類型
如果要 調(diào)試一個(gè)變量的類型 可以使用gettype()
函數(shù)思灰,該函數(shù)將返回類型的字符串形式。
// integer
gettype(123);
// string
gettype('123');
// boolean
gettype(true);
// double
gettype(12.45);
// string
gettype(gettype(123));
如果要 判斷一個(gè)變量的類型 可以用is_type()
函數(shù)混滔,不要用gettype()
// 布爾型
is_bool(TRUE);
// 浮點(diǎn)數(shù)
is_float(3.14);
// 整數(shù)型
is_int(123);
// 字符串
is_string('123');
// 數(shù)組
is_array([]);
// 對(duì)象
is_object(new stdClass());
// 可調(diào)用結(jié)構(gòu)
is_callable('Example::staticFunction');
// 資源
is_resource();
// NULL
is_null();
如果想查看一個(gè)變量的類型和值可以使用var_dump()
洒疚、print_r()
等函數(shù)
類型轉(zhuǎn)換
如果要將一個(gè) 變量強(qiáng)行當(dāng)做另一種類型 來(lái)進(jìn)行計(jì)算的話,可以使用強(qiáng)制類型轉(zhuǎn)換(就是在變量前面加上(type)
這種)坯屿。
// 我是整數(shù)型
$foo = 123;
// 我是字符串類型
$bar = (string)$foo;
允許強(qiáng)制轉(zhuǎn)換的類型有:
-
(int)
油湖、(integer)
可以轉(zhuǎn)成整數(shù)型 -
(bool)
、(boolean)
可以轉(zhuǎn)成布爾型 -
(float)
领跛、(double)
乏德、(real)
可以轉(zhuǎn)成浮點(diǎn)型 -
(string)
可以轉(zhuǎn)成字符串 -
(array)
可以轉(zhuǎn)成數(shù)組 -
(object)
可以轉(zhuǎn)成對(duì)象 -
(unset)
可以轉(zhuǎn)成NULL
-
(binary)
或b
前綴 可以轉(zhuǎn)成二進(jìn)制
如果要將一個(gè) 變量徹底改變成另一種類型,可以使用settype()
函數(shù)
下面是一個(gè)類型轉(zhuǎn)換的簡(jiǎn)單例子
// 整數(shù)型變量
$temp = 123;
// Integer
echo gettype($temp) . '<br />';
// String
echo gettype((string)$temp) . '<br />';
// Integer
echo gettype($temp) . '<br />';
// 返回true
settype($temp, 'string');
// String
echo gettype($temp) . '<br />';
// string(3) "123"
var_dump($temp);
類型比較
字符串
和 字符串
比較吠昭,判斷兩個(gè)字符串的Ascii值大小
參考例子
例子1
// 輸出1
(string)TRUE;
// 輸出空字符串
(string)FALSE;
例子2
$a = TRUE;
// 輸出11
echo $a++ . $a;
// 原因是 增量運(yùn)算符++ 并不會(huì)將 布爾型的$a 轉(zhuǎn)成整數(shù)型來(lái)進(jìn)行運(yùn)算
// 所以 $a++ 一直都等于 TRUE喊括,也就是數(shù)字 1
例子3
$string = '123.456';
// 因?yàn)槭?=+ 而不是 +=胧瓜,所以不報(bào)錯(cuò),且$float未賦值瘾晃,等于null
// 任何表達(dá)式中和`float`進(jìn)行計(jì)算都等于`float`
$float =+ $string;
// 位移運(yùn)算贷痪,自動(dòng)轉(zhuǎn)成整數(shù)型
$integer = 0|$string;
// 邏輯運(yùn)算,自動(dòng)轉(zhuǎn)成布爾型
$boolean = !!$string;