文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

PHP 8 中的那些新功能

2024-02-27 20:03

关注

在本篇文章中我们来了解新的 PHP 8 版本中的新功能和变化。

期待已久的 PHP 8.0 GA 版本计划于 2020 年 11 月 26 日发布。让我们来看看 PHP 8 中的一些新增功能。

新增功能

Union 联合类型

PHP 8 现在支持联合类型,它允许我们在类或参数中声明多个类型。 在版本 8 之前,PHP 已经支持两种特殊的联合类型:nullableiterable


// Nullable - 返回的数据类型可以是 string 或者 null
function getUsername() : ?string {
  return $this->username;
}

// Iterable pseudo-type - 返回的数据类型可以是数组或者 Traversable 的实例
function iterate() : iterable {
  // ...
}

在 PHP 8 中,这些特殊的联合类型已被扩展为包括多种组合,但也有一些例外。


// Union - 返回的数据类型可以是 int 或者 float
function getNumber() : int|float {
  return $this->number;
}

// Nullable 实现为新的联合类型
function getUsername() : string|null {
  return $this->username;
}

mixed 类型

PHP 8 为 PHP 类型系统引入了一种新的伪类型:mixed。 此伪类型允许我们声明任何类型的值,而无需完全排除类型信息。

显式混合类型允许人们向参数、类属性和函数返回添加类型,以表明类型信息没有被遗忘,只是不能更精确地指定,或者程序员明确决定不这样做

为了了解 mixed 类型包括的所有类型,这里将 mixed 表示为联合类型:


array|bool|callable|int|float|null|object|resource|string

JIT (Just in Time compiler)

在编译语言中,源代码提前转换为计算机可读代码。 另一方面,解释型语言在执行源代码时对其进行转换,这要慢得多。 PHP 是一种解释型语言,过去曾有过几种提高 PHP 性能的策略。

提高性能的最新举措是在 PHP 8 中添加了 JIT 编译器。

JIT 编译器是一种介于编译和解释之间的中间地带。 它将在运行时编译和缓存一些代码部分,以便可以使用编译版本而不是解释版本。 这可能会为 PHP 带来巨大的性能提升,但有一些警告。 通常,JIT 编译器主要有利于 CPU 密集型应用程序,例如 3D 渲染或大型数学计算。 如果您将 PHP 用于 Web 应用程序,则启用 JIT 编译器可能不会显着提升性能。

注意:默认情况下不启用 JIT。 如果要使用JIT,需要我们自己手动来开启。

str_contains 函数

新的 str_contains 函数可用于检查给定字符串是否包含另一个字符串。


str_contains ( string $haystack , string $needle ) : bool

下面看一个示例


str_contains("PHP is cool!", "PHP"); // true 
str_contains("PHP is cool!", "php"); // false 
str_contains("PHP is cool!", "not"); // false

注意:str_contains 函数是大小写敏感的

Named Arguments 命名参数

命名参数是 PHP 8 的另一个新增功能。使用命名参数,我们现在可以根据参数名称将参数传递给函数。 这意味着传递参数的顺序无关紧要,因为名称将用于确定参数。


createUser(id: 1, username: hollylawly);
// 参数的位置无关紧要
createUser(username: hollylawly, id: 1);

match 表达式

PHP 8 中引入的 match 表达式类似于 switch 语句,但有一些改进:

下面看一个示例


$operation = 'write';

// Switch 语句
switch ($operation) {
  case 'read':
    $message = 'Viewed!';
    break;
  case 'write':
    $message = 'Created!';
    break;
  case 'update':
    $message = 'Updated!';
    break;
  case 'delete':
    $message = 'Deleted!';
    break;
}

// 等价的 match 表达式
$message = match ($operation) {
  'read' => 'Viewed!',
  'write' => 'Created!',
  'update' => 'Updated!',
  'delete' => 'Deleted!',
}

注意:match 现在是保留关键字

参数列表中的尾随逗号

这个很简单,但一定会让很多人开心! 与参数列表一样,我们现在也可以在参数列表的末尾去掉尾随逗号。


function myFunction(
  param1,
  param2,
  param3,
) {
  // ...
}

另一个好处是它简化了添加参数的差异。 而不是改变两行(在最后一个参数和带有新参数的行添加逗号),只会突出显示一行。


// --- 没有尾随逗号的差异
// Before
function myFunction(
  param1,
  param2,
  param3
) {
  // ...
}

// After
function myFunction(
  param1,
  param2,
  param3,  // ? 这一行改变了
  param4   // ? 这一行改变了
) {
  // ...
}

// --- 带尾随逗号的差异
// Before
function myFunction(
  param1,
  param2,
  param3,
) {
  // ...
}

// After
function myFunction(
  param1,
  param2,
  param3,
  param4,   // ? 这一行改变了
) {
  // ...
}

PHP 8 的支持

因为 PHP 8 已经出现了很长时间,所以已经完成了许多社区工作以确保它在整个网络上得到支持。 但是在升级之前,我们应该确保无论在哪里使用它都受到支持。

以下是一些热门项目、框架、应用程序等的当前支持状态。

WordPress

WordPress 计划在其下一个版本 (v5.6) 中支持 PHP 8,该版本目前已于 2020 年 12 月 8 日发布。这不会影响当前所需的最低版本,即 PHP 5.6.2。

因为这是一个主要的版本更改,所以需要进行大量测试。 如果有兴趣通过 PHP 8 测试帮助 WordPress 社区,请务必查看他们的测试呼吁。

Laravel

Laravel 团队提前完成了 PHP 8 支持所需的所有更新。 这包括对以下项目的更新:

Symfony

Symfony 团队已经准备好从一开始就支持 PHP 8。 如果我们对 Symfony 中支持 PHP 8 的过程感到好奇,可以看一下 JetBrains 的 Nikita Popov 采访 Symfony 的首席工程师 Nikolas Grekas 的视频。

“我们很高兴。进展非常顺利。PHP 8 很容易支持。” — Nicolas Grekas

总结

PHP 8 的发布已经投入了大量工作,毫无疑问,PHP 社区很高兴能够得到它。

有关更改的完整列表或了解引入某些内容的原因,请务必查看 PHP 8 的已实现 RFC 。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯