对于强类型编程语言,数据的转换是很麻烦的事情,在PHP这样的弱类型编程语言里,数据的转换大多一行代码搞定。
数值型-》字符串型
$v1 = 7;
$v2 = (string)$v1;
$v3 = $v1.'';
$v1是整数型7,在$v1前面加上(string),在$v1后面链接一个空字符,$v1就变成字符串7了,浮点型一样。
一般很少需要把数值型转成字符串型的,确切说如果有需要PHP会自动把数值型转成字符串型的。
字符串-》整数型
$v1 = '7';
$v2 = (int)$v1;
$v3 = intval($v1);
$v1是字符串7,可以通过上面两种方法把它转成整数7。一种是强制转换语法在变量前加上(int),一种依靠函数intval。intval用的还是比较多的一个函数,它的参数支持浮点型、布尔值、NULL。
如果是这样的字符串:
$v1 = '7xxxx';
$v2 = (int)$v1;
$v3 = intval($v1);
看效果:
它也会转成整数7
如果是这样的字符串:
$v1 = 'x7xxx';
$v2 = (int)$v1;
$v3 = intval($v1);
效果为这样:
通过上面的例子我们应该有所了解了,字符串转整数,只把字符串前面的数字字符转成整数。
提示:
字符串'07'、'07aa'都会转成十进制整数型7,而不是八进制7。
字符串'023'会转成十进制23,而不是转成十进制19表示这个八进制。
字符串'0x19'转成十进制0,而不是转成十进制25表示这个十六进制。
浮点型转整数也适用这两个方法。
整数、字符串转浮点型也可以用强制转换方法,在变量前加上(float)。
注意的地方:
如果你当前的PHP版本是32位的(32位系统安装的PHP一定是32位的;64位系统安装的PHP可以是64位的,也可以是32位的),一定要注意整数的取值范围-2147483647 ~ 2147483647,
超过这个范围的取值,PHP会把这个数转成浮点型
记住:决不要将超过范围的数值强制转换为 integer,这样会导致不正确的结果。
那这个范围是怎么算出来的呢?
32位的顾名思义一次性只能操作32位(8位等于一个字节),最高位用来表示符号,故计算方式:
最大数:2147483647 = 2^31 - 1
最小数:最大数取反
如果PHP是64位的,那这个范围:
最大数:9223372036854775807 = 2^63 - 1
最小数:最大数取反
其他数据类型-》布尔类型
在一个变量前加上(bool),这个变量就会强制转换布尔类型
字符串''、'0'转成布尔值是假false,其他的都会转成布尔值真true。
效果:
记住'0'转成布尔值是假,在PHP中就是这样规定。
对于整数型、浮点型等于0的会转成布尔值假false,其他都会转成布尔值真true。NULL类型转成布尔值是假false。
布尔类型-》其他数据类型
布尔类型假false,转成整数型是0,转成浮点型是0,转成字符串类型也是0。
布尔类型真true,转成整数型是1,转成浮点型是1,转成字符串类型还是1。
前面我们学习的if判断语句,小括号里其实不用布尔值,其他数据类型也可以,它会自动强制转换成布尔值类型的。
效果: