新的 PHP [1]主要版本 PHP8 预计将于 2020 年底发布。
它现在正处于非常活跃的开发中,所以在接下来的几个月里,开发速度和开发进程可能会有很大的变化。
官方群点击此处。
在这篇文章中,我会罗列出 PHP8 中会发生的一些改变:新功能、性能改进和突破性变化。
因为 PHP8 是一个新的主要版本,所以代码及语法向下兼容性会更低。
如果您一直保持与最新版本保持同步,那么升级应该不会太难,因为大多数突破性的更改在 7.* 版本中都已弃用。
除了突破性的变化,PHP8 还带来了一些不错的新特性,比如 JIT 编译器和 union types,当然还有其它更多的特性。
新特性
从新特性开始说起,但是 PHP8 仍在积极开发中,因此这个清单将随着时间的推移而增长。
联合类型 (Union types) RFC
考虑到 PHP 的动态类型特性,联合类型在很多情况下都很有用。
联合类型是两个或多个类型的集合,这些类型指示可以使用这两个类型中的任何一个。
public function foo(Foo|Bar $input): int|float;
我怎么感觉这个和 C 语言里的联合体有点相似。
请注意,void 永远不能是联合类型的一部分,因为它表示 “根本没有返回值”。
此外,可以使用 |NULL 或使用现有的?。
public function foo(Foo|null $foo): void;
public function bar(?Bar $bar): void;
JIT RFC
JIT-Just-In-Time 编译器承诺显著提高性能,尽管在 Web 应用可能没有较大的好处。
在这一点上还没有任何准确的基准,但它们肯定会出现的。
静态返回类型 (Static return type) RFC
虽然已经可以返回 self ,但在 PHP8 之前,静态不是有效的返回类型。考虑到 PHP 的动态类型特性,它对许多开发人员都很有用。
class Foo
{
public function test(): static
{
return new static();
}
}
弱映射 (Weak maps) RFC
基于在 PHP 7.4 中添加的 WeakRefs RFC 的基础上,在 PHP 8 中 添加了 WeakMap 实现。WeakMap 包含对对象的引用,这不会阻止这些对象被垃圾回收。
以 ORM 为例,它们经常实现包含对实体类的引用的缓存,以提高实体之间关系的性能。
这些实体对象不能被垃圾回收,只要该缓存有对它们的引用,即使缓存是唯一引用它们的东西。
如果该缓存层改为使用弱引用和映射&#x