类型
PHP 支持 8 种原始数据类型。
标量类型:
boolean(布尔型)
当转换为 boolean 时,以下值被认为是 FALSE:◦ 布尔值 FALSE 本身◦ 整型值 0(零)◦ 浮点型值 0.0(零)◦ 空字符串,以及字符串 "0"◦ 不包括任何元素的数组◦ 不包括任何成员变量的对象(仅 PHP 4.0 适用)◦ 特殊类型 NULL(包括尚未赋值的变量)◦ 从空标记生成的 SimpleXML 对象所有其它值都被认为是 TRUE(包括任何资源)。-1 和其它非零值(不论正负)一样,被认为是 TRUE!
integer(整型)
语法
要使用八进制表达,数字前必须加上 0(零)。要使用十六进制表达,数字前必须加上 0x。要使用二进制表达,数字前必须加上 0b。
$a = 1234; // 十进制数
$a = -123; // 负数
$a = 0123; // 八进制数 (等于十进制 83)
$a = 0x1A; // 十六进制数 (等于十进制 26)
常量
PHP_INT_SIZE:
Integer 值的字长常量
PHP_INT_MAX
:最大值
Warning:如果向八进制数传递了一个非法数字(即 8 或 9),则其后面其余数字会被忽略。
整数溢出
如果给定的一个数超出了 integer 的范围,将会被解释为 float。同样如果执行的运算结果超出了 integer 范围,也会返回 float。
PHP 中没有整除的运算符。
值可以舍弃小数部分强制转换为 integer(当从浮点数转换成整数时,将向下取整。 ),或者使用 round() 函数可以更好地进行四舍五入。
转换为整型
要明确地将一个值转换为 integer,用 (int) 或 (integer) 强制转换。
函数 intval() :将一个值转换成整型。
Warning:决不要将未知的分数强制转换为 integer,这样有时会导致不可预料的结果。
float(浮点型,也叫浮点数 float,双精度数 double 或实数 real)
浮点数的精度
永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数或者 gmp 函数。
由于内部表达方式的原因,比较两个浮点数是否相等是有问题的。不过还是有迂回的方法来比较浮点数值的。要测试浮点数是否相等,要使用一个仅比该数值大一丁点的最小误差值。该值也被称为机器极小值(epsilon)或最小单元取整数,是计算中所能接受的最小的差别值。
$a 和 $b 在小数点后五位精度内都是相等的。
<?php$a = 1.23456789;$b = 1.23456780;$epsilon = 0.00001;if(abs($a-$b) < $epsilon) {echo "true";}?>
NaN
由于 NAN 代表着任何不同值,不应拿 NAN 去和其它值进行比较,包括其自身,应该用 is_nan() 来检查。
string(字符串)
简单语法
当 PHP 解析器遇到一个美元符号($)时,它会和其它很多解析器一样,去组合尽量多的标识以形成一个合法的变量名。可以用花括号来明确变量名的界线
数组索引要用方括号(])来表示索引结束的边际
复杂(花括号)语法
只需简单地像在 string 以外的地方那样写出表达式,然后用花括号 { 和 } 把它括起来即可。由于 { 无法被转义,只有 $ 紧挨着 { 时才会被识别。可以用 {\$ 来表达 {$。
存取和修改字符串中的字符
string 中的字符可以通过一个从 0 开始的下标,用类似 array 结构中的方括号包含对应的数字来访问和修改,比如 $str[42]。可以把 string 当成字符组成的 array。函数 substr() 和 substr_replace() 可用于操作多于一个字符的情况。
转换成字符串
一个值可以通过在其前面加上 (string) 或用 strval() 函数来转变成字符串。
大部分的 PHP 值可以转变成 string 来永久保存,这被称作串行化,可以用函数 serialize() 来实现。如果 PHP 引擎设定支持 WDDX,PHP 值也可被串行化为格式良好的 XML 文本。
字符串转换为数值
使用函数 ord() 和 chr() 实现 ASCII 码和字符间的转换
字符串类型详解
PHP 中的 string 的实现方式是一个由字节组成的数组再加上一个整数指明缓冲区长度。
复合类型:
array(数组)
实用函数
unset() 函数允许删除数组中的某个键。但要注意数组将不会重建索引。如果需要删除后重建索引,可以用 array_values() 函数。
可以用 array_diff() 和数组运算符来比较数组。
可以用 count() 函数来数出数组中元素的个数。
object(对象)
数组转换成对象将使键名成为属性名并具有相对应的值。对于任何其它的值,名为 scalar 的成员变量将包含该值。
特殊类型:
resource(资源)
NULL(无类型)
使用 (unset) $var 将一个变量转换为 null 将不会删除该变量或 unset 其值。仅是返回 NULL 值而已。
伪类型:
mixed(混合类型)
说明一个参数可以接受多种不同的(但不一定是所有的)类型
number(数字类型)
说明一个参数可以是 integer 或者 float
callback(回调类型)
伪变量 $...:在函数原型中,$... 表示等等的意思。当一个函数可以接受任意个参数时使用此变量名