PHP8有哪些新特性

PHP8.0是php语言的一次重大更新,它已于2020年11月26日发布。现在最新的版本是8.0.1,2021年1月7日发布。PHP8带来了很多新特性及优化。

例如named arguments, union types, attributes, constructor property promotion, match expression, nullsafe operator, JIT, and improvements in the type system, error handling, and consistency.

 

Named arguments, 命名参数。

一般调用函数是不需要写名字的,直接传入参数值即可。php8在调用函数时可以给参数命名,其好处是:

1. 可以只传入必要的参数,跳过可选的参数。

2. 可以不用按照函数形参顺序来传入实参。

 

Attributes,注解。

该概念类似于java中的Annotations, C#, C++, Rust, Hack  中的Attributes及Python, Javascript中的Decorators。在此之前需要使用PHPDoc的语法来实现,而且一部分代码写在注释中,这让一些不知道这种用法的人感到奇怪,明明删除的是注释,怎么系统崩了。现在在PHP8中可以直接使用php自带的语法定义结构化的元数据,从而可以有效避免误删注释代码的问题。

 

 

Constructor property promotion,构造属性提升。

这个没什么可说的,使用更少的代码来定义和初始化类的成员变量。

 

 

Union types,联合类型

PHP8中可以直接使用PHP语法声明联合类型的变量,而且自带类型检测。使用错误的数据类型在运行时会直接报错。之前只能够通过注释来表明变量使用的类型有哪些组合,使用错误的数据类型也能正常运行。现在的方法让代码更加严谨,bug更少。

Mach expression

新的表达式match,类似于switch,新特性如下:

Match是一个表达式,它执行的结果可以存到变量中或者直接返回。

Match分支只支持单行表达且不需要声明break;语句。

Match的比较更加严格 ,不但匹配数值还匹配数据类型。

Nullsafe operator ,空知安全操作符

新的操作符,使用链式请求来替代空值条件检查。当链中的元素有一个请求失败,则整个链式请求中止,并且返回NULL。看起来代码精简了很多。

Saner string to number comparisons,合理的字符于数字比较

当与数字字符串比较时,PHP8会使用数字进行比较。如果不是数字字符串,PHP8会将数字转换为字符串进行对比。第一次知道在PHP7中 0 == ‘foobar’ 返回 true,这绝对会写出bug。

Consistent type errors for internal functions,为内部方法提供一致类型错误

PHP8中的大多数方法都会抛出错误如果执行方法的参数验证失败。Debug更加容易。

Just-In-Time compilation ,   及时编译

众所周知,PHP是脚本语言,边解释边执行,引入JIT目的就是为了提升性能。

PHP8引入了两个JIT编译引擎,Tracing JIT 和 Function JIT。

有希望的是Tracing JIT,下图表明了3倍性能提升在bench php中,在一些长时间运行的应用中有1.5到2倍的性能提升。传统的应用性能提升并不明显,与php7.4相当。

 

 

除了上述一些新特性外,PHP8还优化了类型系统和错误的处理,一些语法的调整和改善,以及引入了一些新的类、接口、和方法(Functions)。我就不在一一介绍了,具体可以查看https://www.php.net/releases/8.0/en.php。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值