我以前用的最熟的PHP版本是php5.2,对php5.3的新增特性也略有了解,但是之后的就没有系统的学习过,今天发现php7的三目运算符有一个新加的,长这个样子“??”,外加 php7.1 即将发布,感觉有必要系统的补充一下,提升代码的质感。个人还是蛮喜欢php5.2之后的语法变化的,有利于缩减代码的结构复杂度,还有行数
官方有详细的功能实现列表,其中可以找到所有未来可能会出现的新变化:
https://wiki.php.net/rfc
《PHP 5.3、5.4、5.5、5.6 中的新特性》
《PHP7发布。最好语言发布了新版本》
《PHP 7.1 新特性一览》
这几篇文章已经整理的相当详细,这里标记一下方便自己复习:
php5.3
- 支持命名空间
- 增加后期静态绑定
- 增加 goto 操作符
- 添加了原生的闭包(Lambda/匿名函数)支持
- 新增两个魔术方法, __callStatic 和 __invoke
- 添加 Nowdoc 语法支持
- Heredoc 结构中可以用双引号来声明标识符了
- const 关键字可用来在类定义之外定义常量了
- 三元运算符可以简写省略中间的部分
- 异常可以嵌套了
- 可以动态访问静态变量了
- mail()函数支持记录发送日志了
php5.4
- 新增 Traits
- 新增短数组语法
- 新增支持对函数返回数组的成员访问解析
- 无论 php.ini 中是否设置 short_open_tag, 格式总是可用
- 内置用于开发的 CLI 模式的 web server
- 新增在实例化时访问类成员
- 新增了动态访问静态方法的方式
- 闭包支持 $this
- 新增二进制直接量
- session提供了上传进度支持
- 默认使用 mysqlnd
- 让 json 更懂中文
- default_charset从ISO-8859-1已经变为UTF-8
php5.5
- 引入生成器,新增 yield 关键字,方便做迭代相关的处理
- 新增 finally 关键字,强化异常处理
- foreach 支持 list(),强化处理二维数组的能力
- empty() 支持传入一个任意表达式,而不仅是一个变量
- 直接通过下标获取访问数组和字符串字面量的元素或字符
- 新的密码哈希 API
- 新增 boolval() 函数
- 新增 array_column() 函数
php5.6
- 可以使用表达式定义常量,灵活多了
- 使用 ... 运算符定义变长参数函数,对形参进行强化
- 使用 ** 进行幂运算
- use 运算符可以在类中导入外部的函数和常量了
- 加入 hash_equals() 函数,以恒定的时间消耗来进行字符串比较,以避免时序攻击
- 加入 __debugInfo(),配合 var_dump() 对类进行调试
php7
- 基本类型 String Int 也可以用来做类型声明
- 可以对类的返回值类型进行声明了
- 新增三目运算符 ?? 减少 isset() 的使用
- 增加组合比较符 <=>
- 常量可以被定义为数组了
- 类也可以匿名了,可以通过 new class 来实现
- 支持 Unicode codepoint 转译语法
- Closure::call() 暂时绑定一个方法到对象上闭包并立即调用它
- 为 unserialize() 增加过滤参数
- 对 assert() 函数进行功能加强,是单元测试的好伙伴
- use 语法支持一次性的导入多个类
- 增加 random_bytes() 和 random_int() 方便取随机数
- preg_replace_callback_array() 可以传多个匿名函数构成的数组进去
- session_start() 新增参数可以修改系统设定值
- Generator::getReturn() 获取生成器的返回值
- 生成器中可以引入其他生成器
php7.1
- 参数类型声明和函数返回值声明允许前置“?”操作符,表示一个可空类型
- foreach 里面的 list 可以用“[]”的形式来表示了,看起来像数组的赋值过程
- list 在使用的时候允许制定一个 key 值
- 新增 void 返回类型
- 类常量开始支持 public private 和 protected
- 异常处理的时候,catch() 可以捕获多个不同的异常
- 字符串下标取值支持负数
网友评论