
一、布尔(Boolean)
手册中提到特殊类型NULL(包括尚未赋值的变量)会被换为false值,我自己在测试的时候发现NULL值可以转换为false,虽然false也会输出,但是尚未赋值的变量会报Notice错误。但是不建议使用(好吧,好像实际开发中也不会用到)
二、整型(Int)
(1)进制
如果进制前缀决定了这是一个几进制的数字,但是传递了非法的数字时,后面的数字会被忽略
var_dump(010900) //八进制010 = 十进制8
(2)类型转换整型
手册上说,如果浮点数超过了整数的范围,结果显示为未定义。然后我自己做了一下测试,发现一个神奇的事情
因为整型的最大值和平台有关,我是32位的操作系统,所以大家测出来的可能和我不一样
好神奇,有木有??为毛线最大值加了一个数字反而变成了负值?然后我就想如果是php的最大值加一,再强制转换为整型,结果是怎样?
貌似是变成了在操作平台上php的最小值,好吧,我自己现在还没有找到合理的解释,以后填坑。
三、浮点型(Float)
(1)两个小数最好不要比较!这一点大家可能已经来了解到了,但是这里还是提出来,毕竟是一个坑
echo (int)((01+0.7)*10) //显示7
这里贴出官方给出的解释:
以十进制能够精确表示的有理数如 0.1 或 0.7,无论有多少尾数都不能被内部所使用的二进制精确表示,因此不能在不丢失一点点精度的情况下转换为二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999999991118...。
(2)在数学运算过程中有时会产生一个常量NaN,和其他任何值比较都是NaN,NaN和他本身比较也是NaN,这一点和javascript很类似
四、字符串(String)
(1)heredoc结构和nowdoc结构
两者可以分别理解为应对超长字符串的双引号和单引号,具体用法如下:
heredoc结构:
注意:结束标识符必须顶格,而且结束符所在的行除了有一个分号,不能有其他字符
nowdoc结构:
注意:开始的标识符必须用单引号''括起来
(2)操作字符串长度