基本概念
在PHP中定义变量是不支持指定类型的,而是在其赋值后根据内容自动处理。
比如一个变量,给其赋值一个字符串,那么这个变量就是字符串类型的,随后又将其值改成一个整数型,那么这个变量也会自动变成整数型的变量。
在计算中,如果有一个变量是
float
类型,那么整个计算结果也将会是float
类型。
原始类型
PHP中一共有 9种 原始数据类型
-
标量类型
- boolean(布尔值)
- integer(整数型)
- float(浮点型,也叫double)
- string(字符串)
-
复合类型
- array(数组)
- object(对象)
- callable(可调用类型,如同callback回调函数)
-
特殊类型
- resource(资源)
- null(无类型)
文档类型
还有一些常用于文档上的伪类型,它们并不是PHP的原生类型,只是用于文档上方便人们理解而产生的类型,所以不能在PHP里使用
mixed(说明参数可以是多种类型的数据)
number(说明参数是一个
integer
或float
)callback(说明参数是一个回调函数)
array|object(说明参数可以是
array
或object
)void(作为返回值时表示返回值时无用的,作为参数时表示不接受任何参数)
...(说明函数可以接受任意数量的参数)
判断类型
如果要 调试一个变量的类型 可以使用gettype()
函数,该函数将返回类型的字符串形式。
// integer
gettype(123);
// string
gettype('123');
// boolean
gettype(true);
// double
gettype(12.45);
// string
gettype(gettype(123));
如果要 判断一个变量的类型 可以用is_type()
函数,不要用gettype()
// 布尔型
is_bool(TRUE);
// 浮点数
is_float(3.14);
// 整数型
is_int(123);
// 字符串
is_string('123');
// 数组
is_array([]);
// 对象
is_object(new stdClass());
// 可调用结构
is_callable('Example::staticFunction');
// 资源
is_resource();
// NULL
is_null();
如果想查看一个变量的类型和值可以使用var_dump()
、print_r()
等函数
类型转换
如果要将一个 变量强行当做另一种类型 来进行计算的话,可以使用强制类型转换(就是在变量前面加上(type)
这种)。
// 我是整数型
$foo = 123;
// 我是字符串类型
$bar = (string)$foo;
允许强制转换的类型有:
-
(int)
、(integer)
可以转成整数型 -
(bool)
、(boolean)
可以转成布尔型 -
(float)
、(double)
、(real)
可以转成浮点型 -
(string)
可以转成字符串 -
(array)
可以转成数组 -
(object)
可以转成对象 -
(unset)
可以转成NULL
-
(binary)
或b
前缀 可以转成二进制
如果要将一个 变量彻底改变成另一种类型,可以使用settype()
函数
下面是一个类型转换的简单例子
// 整数型变量
$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);
类型比较
字符串
和 字符串
比较,判断两个字符串的Ascii值大小
参考例子
例子1
// 输出1
(string)TRUE;
// 输出空字符串
(string)FALSE;
例子2
$a = TRUE;
// 输出11
echo $a++ . $a;
// 原因是 增量运算符++ 并不会将 布尔型的$a 转成整数型来进行运算
// 所以 $a++ 一直都等于 TRUE,也就是数字 1
例子3
$string = '123.456';
// 因为是 =+ 而不是 +=,所以不报错,且$float未赋值,等于null
// 任何表达式中和`float`进行计算都等于`float`
$float =+ $string;
// 位移运算,自动转成整数型
$integer = 0|$string;
// 逻辑运算,自动转成布尔型
$boolean = !!$string;