PHP支持多种不同的数据类型,但通常被划分为两种:标量型与符合型。
一个标量值在同一时间只包含一个值。PHP支持以下标量型数据:
boolean 只能出现true或者false int 整型数值 float 浮点型数值 string 字符串
PHP承认两种数值型数据,整形 和 浮点型。整形数据只能存放整形数值(意味着可以是正负整数)。数字可以被定义为多种进制:
十进制 10; –11; 1452 标准十进制。注意不需要千位逗号分割 八进制 0666; 0100 八进制——识别八进制注意起始位0开头和用来表示Unix风格的文件与文件夹权限 十六进制 0x123; 0XFF; -0x100 十六进制;注意开头使用0x,忽略大小写
译者注:十进制与八进制的表达非常类似容易混淆,稍不仔细就会出现预料之外的结果。
浮点数(有的时候被称为双精度)是带有小数点的数值,赋值方式类似整形,同时也支持不同表达方式:
十进制 0.12; 1234.43; -.123 传统的十进制表示 科学计数法 2E7, 1.2e2 科学计数法——由一个不可忽略的数值(通常称为尾数),跟随一个不区分大小写的”e”和一个指数。结果就表示位数乘以10的指数次方
这里有些在处理数值时要注意的地方。第一,PHP运行的平台(这里只软硬件)决定运算的精度和范围。举例来说64-bit的系统就会比32-bit的系统运算精度和范围更高。糟糕的是你开发的时候没有意识到之间的差异,看似无害可靠的程序可能引起灾难性的后果。
必须明白的是浮点型数据的结果经常会出乎意料,思考下面例子:
echo (int) ((0.1 + 0.7) * 10);
你希望这个表达式得到的结果是8(事实上如果你不把结果转换为整形的话结果是正确的)。但结果输出的是7。发生这种情况的原因就是在内存中这个表达式的结果是7.999999无限趋向于8;但是如果使用数据强制转换成整形,那么小数位都会被省略。(12.5%精度丢失)
从这个教训中我们得知:了解数值数据的局限性并计划好如何使用他们。当你需要精确计算数值的时候请考虑使用BCMath扩展来替代PHP内置的数据类型。
在很多程序员的意识里,字符型数据等同于文本。很多语言也包括PHP,这种解释非常片面,在某种情况下甚至是错误的。字符串数据实际上是被排列搜集的二进制数据——可以成为文章内容,也可以是图片文件数据,一个电子表格文件,甚至是一首歌。
PHP提供了一个庞大的数组来存放这些字符数据。后面会有一整个章节来介绍这个题名为“字符”的章节。
一个布尔值只能是:true或者false。通常来说,布尔值被用在逻辑判断中,后续章节会详细讨论。
当我们将其他数据类型与布尔类型相互转换时需要注意一些特殊的规则:
之前我们研究了标量数据, PHP支持两种复合型数据——因为可以存放其他数据类型,故名为符合数据类型:
除了上面讲到的类型,PHP在特定情况下会用到以下特殊情况:
正如我们提到的,PHP在数据类型的转换中请考虑精度丢失。因为数据可以被数据强制转换操作转换成其它类型数据。转换操作也非常简单,在需要转换的数据之前永远括号把目标数据类型扩起来,赋值给一个变量:
$x = 10.88; echo (int) $x; // 输出结果 10
提示不是什么类型的数据都可以相互转换,比如任何值想要转换成资源型变量那么结果只有杯具——同时你却可以把一个资源型数据转换成数值型或者字符型,至少PHP会给出资源性数据的ID以供转换成字符型或者数值型。
修订:
2010年04年06日 —— Siemen
1. 小节1.3.1中的第一个表格样式调整
2. 小节1.3.3/1.3.4/1.3.5中的末尾多了一个li标签删除
3. 所有代码部分使用csdn重新插入