XuLaLa.Tech

首页客户端下载Windows 使用V2Ray 教程SSR 教程Clash 教程

php8.0已发布-新特性

2025.04.09

PHP8.0是PHP语言的最新版本,已经在11月26号发布了,如果之前你还在观望,现在可以来尝尝鲜。它包含了很多新功能与优化项, php8新特性包括命名参数、联合类型、注解、构造器属性提升、match 表达式、nullsafe 运算符、JIT,并改进了类型系统、错误处理、语法一致性。你也可以点击这里,查看官网的说明。

文章目录

  • 1 命名参数
  • 2 构造器属性提升
  • 3 联合类型
  • 4 Match表达式
  • 5 Nullsafe 运算符
  • 6 字符串与数字的比较更符合逻辑
  • 7 内部函数类型错误的一致性
  • 8 JIT

命名参数

通常,我们会看到带有包含默认值的参数的方法,而我们要更改的唯一方法是最后一个方法。这迫使我们为所有第一个条目写空值,以便仅修改最后一个。
在PHP 8.0中添加了“命名参数”功能 ,使我们可以跳过函数或方法的参数,而仅将值设置为我们关心的参数。必须为此命名它们。看起来是这样的:

<?php
function myFunc(
$a = 10,
$b = 20,
$c = null
) {
}
myFunc(c: 100);
// $a = 10; $b = 20; $c = 100

构造器属性提升

更少的代码来定义并初始化属性。

class Point {
public function __construct(
public float $x = 0.0,
public float $y = 0.0,
public float $z = 0.0,
) {}

联合类型

相较于以前的 PHPDoc 声明类型的组合, 现在可以用原生支持的联合类型声明取而代之,并在运行时得到校验。

class Number {
public function __construct(
private int|float $number
) {}
}
new Number('NaN'); // TypeError

Match表达式

新的 match 类似于 switch,并具有以下功能:

  • Match 是一个表达式,它可以储存到变量中亦可以直接返回。
  • Match 分支仅支持单行,它不需要一个 break; 语句。
  • Match 使用严格比较
    echo match (8.0) {
    '8.0' => "Oh no!",
    8.0 => "This is what I expected",
    };
    //> This is what I expected

    Nullsafe 运算符

    现在可以用新的 nullsafe 运算符链式调用,而不需要条件检查 null。 如果链条中的一个元素失败了,整个链条会中止并认定为 Null。

    $country = $session?->user?->getAddress()?->country;

字符串与数字的比较更符合逻辑

PHP 8 比较数字字符串(numeric string)时,会按数字进行比较。 不是数字字符串时,将数字转化为字符串,按字符串比较。

0 == 'foobar' // false

内部函数类型错误的一致性

现在大多数内部函数在参数验证失败时抛出 Error 级异常。

strlen([]); // TypeError: strlen(): Argument #1 ($str) must be of type string, array given
array_chunk([], -1); // ValueError: array_chunk(): Argument #2 ($length) must be greater than 0

JIT

PHP 8 引入了两个即时编译引擎。 Tracing JIT 在两个中更有潜力,它在综合基准测试中显示了三倍的性能, 并在某些长时间运行的程序中显示了 1.5-2 倍的性能改进。 典型的应用性能则和 PHP 7.4 不相上下

© 2010-2022 XuLaLa 保留所有权利 本站由 WordPress 强力驱动
请求次数:69 次,加载用时:0.665 秒,内存占用:32.19 MB