PHP 8 于 2020 年 11 月 26 日发布,为该语言带来了重大改进和新功能,增强了性能、可读性和可用性。本文介绍了 PHP 8 中最显著的变化和新增功能。
JIT(即时)编译器
什么是 JIT?
即时 (JIT) 编译器是 PHP 8 中最显著的增强功能之一。它通过在运行时编译代码来提高性能,从而为 CPU 密集型任务提供更好的执行速度。
JIT 的工作原理
JIT 在运行时将部分代码翻译成机器语言,然后可由 CPU 直接执行。这与逐行执行代码的传统解释不同。
好处
- 表现:CPU 密集型任务的速度显著提高。
- 优化:对于涉及大量计算的应用程序(例如科学计算或数据处理)具有更好的性能。
联合类型
定义
联合类型允许一个变量保存多种类型。此新增功能增强了 PHP 中的类型系统,可实现更精确的类型定义。
句法
function foo(int|float $number): int|float {
return $number;
}
好处
- 类型安全:减少与类型相关的错误。
- 灵活性:更具表现力和灵活性的类型声明。
命名参数
定义
命名参数允许根据参数名称而不是其位置将参数传递给函数。
句法
function foo(string $a, string $b, string $c) {}
foo(a: 'first', c: 'third', b: 'second');
好处
- 可读性:使函数调用更具可读性。
- 灵活性:更容易使用具有许多参数的函数,尤其是具有默认值的函数。
属性
定义
属性(在其他语言中也称为注释)提供了一种向类、方法、属性和参数添加元数据的方法。
句法
#[ExampleAttribute]
class Foo {
#[AnotherAttribute]
public function bar() {}
}
好处
- 元数据:提供定义元数据的标准化方法。
- 反射:通过反射 API 更轻松地处理元数据。
建造商物业推广
定义
构造函数属性提升简化了构造函数中的类属性声明和初始化。
句法
class Point {
public function __construct(
public float $x,
public float $y,
public float $z
) {}
}
好处
- 简明:减少样板代码。
- 可读性:使类定义更加清晰,更易读。
匹配表达式
定义
这 match
表达类似于 switch
,但功能更强大,更简洁。
句法
$result = match ($input) {
1 => 'one',
2 => 'two',
3 => 'three',
default => 'unknown',
};
好处
- 简明:比
switch
. - 表达:返回一个值,不同于
switch
.
空安全运算符
定义
空安全运算符 (?->
) 简化了访问属性或方法时的空检查。
句法
$result = $object?->property?->method();
好处
- 简单:减少了多次空检查的需要。
- 可读性:使涉及可空属性或方法的代码更加清晰。
错误处理的改进
TypeError 和 ValueError
PHP 8 引入 TypeError
和 ValueError
以便更好地处理错误。这些异常使得捕获和处理特定类型的错误变得更容易。
好处
- 粒度:更细致、更具体的错误处理。
- 调试:更容易识别和解决问题。
弱映射
定义
弱映射允许存储对象而不会阻止其垃圾收集。
句法
$weakMap = new WeakMap();
$weakMap[$object] = $data;
好处
- 内存管理:通过允许对未使用的对象进行垃圾收集,帮助更有效地管理内存。
- 灵活性:对于缓存和其他对象生命周期管理至关重要的场景很有用。
其他新功能和改进
一致的类型错误
PHP 8 为类型错误带来了更高的一致性,使得类型相关的问题更容易理解和修复。
新的字符串函数
新的字符串函数,例如 str_contains
, str_starts_with
, 和 str_ends_with
,提供更多的便利性和可读性。
改进语法
各种语法改进,例如参数列表和命名参数中的尾随逗号,增强了代码的可读性和可维护性。
结论
PHP 8 引入了一系列强大的功能和改进,提高了语言的性能、可读性和可用性。从 JIT 编译器到命名参数和属性,这些新增功能使 PHP 成为一种更强大、更现代的语言,满足了现代 Web 开发的需求。我们鼓励开发人员探索和利用这些新功能来编写更简洁、更高效、更易于维护的代码。