PHP8的新特性介绍

php8

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

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

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

PHP8的新特性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; 也是不可以的.

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

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

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

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

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

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

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

PHP8的新特性3: 属性Attributes V2版

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

对于Annotation不熟悉和不理解的朋友,别要被这个概念误导。在PHP语言中,这个注解,你把它当做给在写程序的时候,可以方便的知道,传递的参数,或者函数的返回值指定类型用的注释。它和PHP程序的执行没有什么关系,而是写给开发人员看的。和Java中的Annotation有本质的区别。

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

这个特性就是可以减少我们持续的输入一些类的繁琐的变量声明代码。例如: 以前要这样写:

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电子商务平台的主要开发者


发表评论