PHP 8 的新特性介绍

PHP 8 的新特性介绍

分类: 网站开发

令人期待的PHP 8预计在2020年11月就要发布了, 这是一个全新的里程碑式的新版本, 将有一些全新的变化, 包括新的特性与显著的性能提升. 当然, 现在PHP 8还在持续的开发过程中, 但是第一个Alpha测试版本将在2020年6月18号发布公测.

因为PHP 8中这些全新的变化, 恐怕你需要对现有项目的部分代码做出调整,才能让它们在PHP 8的环境下运行起来. 当然,如果你一直持续的更新你项目所依赖的PHP的版本, 那么升级工作肯定要容易一些, 毕竟相对于PHP  7.X版本来讲, 要做出的调整比 PHP  5.x 要少多了。当然,不用担心,我会把最重要的变化列出来供你参考.

这些重要的变化,包括 JIT编译器, 联合类型数据Union Types,属性Attributes等.

PHP 8新特性1: 联合数据类型

请参照针对Union Types 2.0的官方最新定义, PHP RFC: Union Types 2.0

这是一个令人欣慰的非常有意思的新特性, 在Github上已经讨论了很久,并最终形成了解决方案. 它允许显式的定义某个变量的类型,可以是1种或者多个种。以前,我们只能通过 PHPDOC Annotation, 但是在新的PHP 8中,我们可以通过 T1|T2 .. 这样的方式,进行定义了. 但是有以下几点需要特别注意:

1: Void 类型永远不能作为联合类型中的一种,比如,不能这样定义 int|float|void $var;

2: NULL 可以作为联合类型中的一种,比如 int|float|null $var; 这是可以的。 ?int|float $var; 也可以使用这种写法.

3: 每种类型在联合类型声明中只能出现一次, 比如, 你不能定义 int|INT $a; 或者类似 use A as B; A|B $var; 也是不可以的.

其他一些不常用的变化还有一些,我会专门发布详细的介绍文章.

PHP 8的新特性2: JIT 编译器 (Just In Time)

这个是最让人期待并被最多讨论的新特性,主要是因为它将带来显著的性能提升. 尽管还没有任何的官方性能测试报告出炉, 但是我们都确信它的到来. 我们这里主要介绍一下什么是JIT, 以及为何它让人期待.

因为PHP是一种解释性的编程语言, 它不像Java,C或者Rust那样,已经在执行之前编译好了, 直接扔给CPU就能运行了. 那么PHP的JIT引擎,实际上会在运行时编译部分的代码, 让它可以更快的被CPU执行。你可以把它理解为, 系统在执行时,将生成可以被缓存可执行的代码,而下次执行时省去了编译的过程。

JIT的设计思路是: 提供一个检查机制,在执行你的代码时,如果检测到你代码的某一部分以前执行过,那么就会给这部分代码标记为“已编译”, 即Hot. 这部分代码随后会被编译为可被CPU立即执行的经过优化的机器码, 那么以后再运行,就可以直接调用了.

听上去很美好, 但是在实际的应用过程中,将给你的开发增加不小的复杂度,特别是在一些特殊的大计算量的需求场景. 因此我们建议应该继续观察,进行取舍。坚持使用适合自己的技术,而不是强行使用所谓的新技术.

我们会发布专门的详细文章,介绍JIT。

PHP 8新特性3: 属性Attributes V2版

其实就是其他语言中常见的标记信息Annotation. 我们一直通过PHPDOC的方式使用,现在可以直接用在代码中了,  方式是 <<ExampleAttr>>, 对类声明中的某个变量进行声明.

PHP8 新特性: 构造函数的属性声明语法糖

这个特性就是可以减少我们持续的输入一些繁琐的变量声明 。。

例如: 以前要这样写

public class Old{

        public $a;

        public $b;

        public function __construct($a, $b){

                 $this->a = $a; $this->b = $b;

        }

}

新的写法是:

public class NewPhp{

        public function __construct(public $a = 'foo', public $b = 'bar' ) { }

}

也没啥新奇的 ...

以下新特性在下一篇中详细介绍

PHP 8新特性: 新的返回值 static

PHP 8新特性: 新的mixed类型

               

维墨科技 全职高手

一枪穿云@维墨科技

系统架构师/专业网站应用程序开发工程师; Master of PHP/AWS/网络服务, 20年IT行业经验; 精通各种前后端开发技术, Linux/Laravel/WordPress/VueJS/ElementUI 作为主要武器; SmartBro电子商务平台的主要开发者

职务: 全栈工程师 银武: 枪火 碎霜