1. PHP内置类型有
四种标量类型 bool int float(或称double) string
两种复合类型 array object
两种特殊类型 resource NULL
2.相关命令
查看类型 gettype
判断类型 is_xxx
强制转换类型 (xxx)变量 或者settype
获取变量的当前类型值
xxxval();
如intval,boolval,floatval,strval
is_numeric检测变量是否为数字或数字字符串
3.详细介绍
-------------------------------------
bool:TRUE or FALSE
以下值被认为是FALSE
bool false
int 0
float 0.0
string “” or “0”
arrray []
NULL null或尚未被赋值的变量
从空标记生成的SimpleXML对象
其他都是TRUE(包括任何source资源)
注意:-1和其他非零值(不论正负都为TRUE)
所以可扩展为 -1>false为真
--------------------------------------
integer:集合{…-2,-1,0,1,2}中的一个数
二进制,十六进制,八进制均为int类型标量
注意:二进制表达的integer在5.4起可用
二进制 0b
八进制 0
十六进制 0x
注意:32位电脑的int占4个字节,每个字节8个单元,所以最大值为21亿左右,64位为9223372036854775807,计算方式为最大的正数是 01..1 后面31个1, 结果是 2147483647,最小的负数是 10...0后面31个0, 计算方法是用补码, 结果是 -2147483648, 而0xffffffff 是 -1
注意:如果向八进制传递一个非法数字(8,9)则本位以及后面的位将会被忽略(如012954)的八进制值为012,十进制值为10
注意:如果INT溢出将会被自动转换为float类型
注意:不要将未知的分数强制转换为int,不然结果将会不可预料
如(int) ( (0.1+0.7) * 10 )的值为7,而不是8.
--------------------------------------
float:浮点的形式有以下几种
LNUM [0-9]+ DNUM ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9]*) EXPONENT_DNUM [+-]?(({LNUM} | {DNUM}) [eE][+-]? {LNUM})
浮点的长度与平台设置有关
注意:永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。因为只要浮点数换算成二进制是无穷尽的,那么它的实际值是略小于它本身的,如0.1实际值为0.0999999…(二进制为0.000
1100
1100
1100
…),如何要比较两浮点数是否相等,可以控制精度为小数点后XX位 如0.000001,然后将两数相减和此极小值比较,如果小于此值,则认为在XXX位精度的情况下,这两个浮点数是相等的。
注意:有时数学运算的结果为NaN,它代表任何不同值,所以不能用于与其他任何类型值比较(包括自身),可用is_nan判断。
注意:INF是无穷大的意思。
--------------------------------------
string:邮一系列的字符组成,每个字符占一个字节,因此PHP只支持256的字符集,不支持unicode。
表示方式为‘’,“”,<<<‘eof’xxxeof(xxx中的变量不会被解析),<<<“eof”xxxeof(xxx中的变量可以被解析).
提示:string最大可以达到2GB。
提示:PHP_EOL代表换行。
提示:string中的变量最好用{}括起来。
{}可扩展至类静态变量:{${beers::$ale}},{${beers::softdrink}}
提示:PHP 的字符串在内部是字节组成的数组。因此string可以被当作Array处理,每一个字符可当作一个元素。
注意:用超出字符串长度的下标写入将会拉长该字符串并以空格填充。 如$a = "abc“ 如果操作$a[4] = “d”,那么字符串长度将会被扩展到5,下标3的位置将会以空格填充。
注意:下标必须为整数或可转换为整数的字符串。
大部分PHP值(除了resource)可以转变成STRING,即串行化,可用serialize来实现。
--------------------------------------
array:是一个有序映射。
5.4起用[]代替array()。
键名如果是合法整型值的字符串,会被转换,“8”=8,但“08”不能被转换,因为它不是合法的十进制。
浮点键名会被转换为整型,但小数会被舍去。
布尔键名会被转换为0,1。
null键名被转换为“”。
数组和对象不能成为键名。
如果出现相同的键名,则后面的会覆盖前面的。
新建,修改,删除(unset)。
--------------------------------------
object:新建一个对象 new abc;
将其他任何类型的值转换为对象,将会产生一个public scalar属性,值为变量的值。(数组转换为obj将会得到与数组结构相同的,元素都为public的对象)
--------------------------------------
resource:一种特殊变量,保存到外部资源的一个引用。
常用函数为:get_resource_type取得资源类型。
由于资源类型变量保存有为打开文件、数据库连接、图形画布区域等的特殊句柄,因此将其它类型的值转换为资源没有意义。
自动回收,所以不必手动销毁,但持久数据库连接比较特殊,它不会被回收掉。
--------------------------------------
NULL:表示NULL。
被赋值为NULL,尚未被赋值,UNSET 都会得到NULL。
使用 (unset) $var 将一个变量转换为 null 将不会删除该变量或 unset 其值。仅是返回 NULL 值而已。
--------------------------------------
callback回调类型:call_user_func call_user_func_array 实际运用中才得知。
--------------------------------------
字符与ascii之间的转换可用函数(C++可直接将字符转换为INT取得节ascii码)
ord,chr
4.类型转换的判别
进制转换的函数为:base_convert(值,当前进制,目标进制)
提示:如果字符串转进制则当前进制和目标进制都一样 如base_convert("0b11",2,2);则可转换成二进制,但需要理解的是,转换后的类型仍然是string,但可以进行位运算了。
如果有一个是float,则运算都转为float。否则都是int
注意:转换为二进制(binary)