php 8 , PHP 的一个新的大版本 , 预计将于2020年12月3日发布 , 这意味着将不会有 PHP 7.5 版本 。PHP8目前正处于非常活跃的开发阶段 , 所以在接下来的几个月里 , 情况可能会发生很大的变化 。
在这篇文章中 , 我会维持一个最新的清单列表 , 列出预计会出现的新特性、性能提升和突破性的变化 。由于 PHP 8 是一个新的大版本 , 因此您的代码被破坏的可能性更高 。如果您始终保持运行 PHP 的最新版本 , 那么升级相对来说就会轻松很多 , 因为在7. *版本中 , 大多数重大更改均已弃用 。
除重大更改外 , PHP 8还带来了一些不错的新功能 , 比如说 JIT编译器, 联合类型, 属性 , 以及更多 。
新特性从新特性开始 , 请记住 PHP8 仍处于活动开发阶段 , 因此此列表将随着时间的推移而增长 。
联合类型考虑到 PHP 动态语言类型的特性 , 现在很多情况下 , 联合类型都是很有用的 。联合类型是两个或者多个类型的集合 , 表示可以使用其中任何一个类型 。
public function foo(Foo|Bar $input): int|float;
请注意 , 联合类型中不包含 void , 因为void 表示的含义是“根本没有返回值” 。另外 , 可以使用 |null 或者现有的 ? 表示法来表示包含 nullable 的联合体 :
public function foo(Foo|null $foo): void;
public function bar(?Bar $bar): void;
JITJIT — just in time — 编译器虽然不总是在 Web 请求的上下文中 , 但是有望显着地提高性能 。目前还没有完成任何准确的基准测试 , 但是肯定会到来 。
如果您想进一步了解JIT对PHP的作用 , 可以阅读我写过的另一篇文章此处 。
属性属性在其他语言中通常被称为 注解 , 提供一种在无需解析文档块的情况下将元数据添加到类中的方法 。
快速浏览一下 , 这里有一份来自 RFC 的属性示例:
【PHP 8 中新特性以及重大调整】use AppAttributesExampleAttribute;
<<ExampleAttribute>>
class Foo
{
<<ExampleAttribute>>
public const FOO = 'foo';
<<ExampleAttribute>>
public $x;
<<ExampleAttribute>>
public function foo(<<ExampleAttribute>> $bar) { }
}
<<PhpAttribute>>
class ExampleAttribute
{
public $value;
public function __construct($value)
{
$this->value = https://www.isolves.com/it/cxkf/yy/php/2020-07-06/$value;
}
}
如果您想深入了解属性如何工作以及如何构建自己的属性 , 您可以在此博客上阅读有关深入属性的信息 。
新增 static 返回类型尽管已经可以返回 self , 但是 static 直到 PHP 8 才是有效的返回类型。考虑到 PHP 具有动态类型的性质 , 此功能对于许多开发人员将非常有用 。
class Foo
{
public function test(): static
{
return new static();
}
}
新增 mixed 类型有人可能将其称为必要的邪恶:mixed 类型让许多人感觉十分混乱 。然而 , 有一个很好的论据支持去实现它:缺少类型在 PHP 中会导致很多情况:
- 函数不返回任何内容或返回空值
- 我们需要多种类型的一种类型
- 我们需要的是PHP中不能进行类型提示的类型
- array
- bool
- callable
- int
- float
- null
- object
- resource
- string
另外 , 还需要注意 , 因为 mixed 类型已经包括了 null , 因此 mixed 类型不可为空 。下面的代码会触发致命错误:
// 致命错误:混合类型不能为空 , null已经是混合类型的一部分 。
function bar(): ?mixed {}
throw 表达式该RFC将throw从一个语句更改为一个表达式 , 这使得可以在很多新地方抛出异常:
$triggerError = fn () => throw new MyError();
$foo = $bar['offset'] ?? throw new OffsetDoesNotExist('offset');
弱映射基于在 PHP 7.4 中新增的 弱引用 RFC , PHP 8 中新增了 WeakMaps(弱映射)的实现 。WeakMaps(弱映射)在保持对一些对象的引用的同时 , 并不会组织这些对象被垃圾回收机制处理。
推荐阅读
- 茶叶的三大特性是什么,祁红的特点是什么
- 3分钟短文 | PHP new self 跟 new static 啥区别?
- PHP开发环境搭建工具有哪些?
- PHP这门编程语言在各大网站使用情况怎么样?
- 关于Oracle数据库12c 新特性总结
- 茶树生育的相关特性,茶树总发育周期
- Klein.php - 轻量级PHP路由库
- Laravel作为PHP框架,它的优点和功能是什么?
- Linux 5.7内核新特性介绍
- 轮胎该怎么选,米其林、普利司通各大品牌特性,你都知道吗?