本文主要是介绍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。
这篇关于PHP8有哪些新特性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!