NULL
转换到NULL的特性,从PHP7.2开始废弃,8.0.0起被移除
Boolean 布尔类型
使用常量true和false 不区分大小写
-1 和其他非零值(不论正负)一样,都是true
Integer 整型
语法
使用八进制表达必须加上0,PHP8.1.0后可以加上0o或者0O,使用十六进制表达必须加上0x,二进制加上0b
PHP7.4.0后整型数值可能会包含下划线 _ , 展示的时候会自动过滤
整型溢出
溢出会返回float
整数除法通过intdiv()实现,强转忽略小数点,可用round()进行四舍五入
整型转换
从浮点型进行转换,向零取整,PHP 8.1.0后 会发出弃用通知
浮点数溢出时,结果为未定义
未知的分数强制转换成int会有不可预料的后果
从其他类型转换,无定义
Float浮点型
比较浮点数
比较浮点数通过eps误差
NaN
那NaN和其他任何值进行比较都是false,除了true
--宽松返回true,看值,严格返回false,类型不同
String 字符串
语法
单引号和双引号的区别是可以解析 '\' 和 '\\' 但是不解析变量和转义字符,他可以直接输出转移字符如\n,但无法实现换行
heredoc结构 (类似双引号字符串)
<<< 之后提供一个结束标识符,然后换行,接下来是字符串本身,结束标识符可以使用空格或者tab缩进
如果结束标识符的缩进超过内容任何一行,将抛出ParseError异常,制表符和空格不能混用,会抛出异常
7.3后不需要在结束标识符后面跟分号或者换行符,可以在结束标识符后继续表达式,但是如果在某一行的开头找到了结束标识符,那么就可能被看作结束标识符并引起ParseError
在7.3前带有结束标识符的行不能包含除‘;’外的任何字符。
Nowdoc结构 (类似单引号字符串)
-
结束标识符需要用单引号括起来
-
Nowdoc结构在PHP 5.3.0中加入
字符串插值
用双引号或heredoc结构定义是,其中的变量可以替换
${expresssion} 这个用法,从PHP 8.2.0开始被弃用,because可能被解释为可变变量
可以插入数组,在PHP 7.1后支持负数字索引
高级语法
允许使用任意访问器对变量进行插值,这种语法要紧跟在{后面的$才会被识别
存取和修改字符串中的字符
可用类似array的结构来访问 $str[42]
字符串下标必须为整数或可转换为整数的字符串,否则会发出警告。
有用的函数和运算符
字符串可用'.'连接。
转换成字符串
数组array总是转换成字符串"Array"不能直接显示该数组的内容,可用echo $arr['foo'] 这种结构显示
字符串类型详解
实现方式是一个由字节组成的数组再加上一个整数指明缓冲区长度。
数字字符串
如果一个PHP string 可以被解释为int 或 float 类型 , 则它被视为数字字符串
任何包含字母E周围是数字的字符串都将视为以科学计数法表示的数字
PHP 8.0.0前后
Array数组
语法
定义数组array()
类型转换与覆盖
key可以是int或者string 。 value可以是任意类型
如果key是Float 、 Bool 、 Null,会触发强制转换 , Array和object不能被用为键名,相同键名其他会被覆盖只有最后一个会被使用,其他会被覆盖。
PHP数组可以同时含有int和string类型,key未指定,就自动使用之前用过的最大int键名加上一作为新的键名
负数索引
PHP 8.3之前,分配负整数key n 会将下一个key分配给 0
方括号语法访问数组单元
花括号语法在PHP 7.4 中弃用,在PHP 8.0 中不支持
用方括号的语法新建/修改
类似字符串,需要注意的是从 PHP 7.1.0 起,对字符串应用空索引操作符会抛出致命错误。以前,字符串被静默地转换为数组。
数组解包
可以使用[ ] (自PHP 7.1起)或者list()语言结构解包数组
实用函数
数组做什么和不做什么
$foo[bar]错了
字符串表示的数组索引上加上引号foo['bar']
转换为数组
对于int 、 float 、 string 、 bool 和 resource 等类型 转换为array ,会是一个有且仅有一个元素的数组
对于object 可以是一个数组 , 其单元为该对象的属性,键名为成员变量名
ps
-
整数属性不可访问
-
私有变量会加上类名作前缀
-
保护变量会加上一个‘*’做前缀
比较
可用array_diff()和数组运算符来比较数组
Object 对象
对象初始化
使用new语句实例化一个类
转换为对象
一个对象转换成对象,它不会有任何变化,其他类型的值转换成对象会创建一个stdClass的实例
Enum 枚举
枚举基础
类型转换
enum转object无变化,enum转array,纯粹枚举会创建单个name键的数组,回退枚举会创建带name和value键的数组,其他的转换会报错
参考资料