前瞻 PHP8.4 的新特性

PHP 8.4 将于 2024 年 11 月 21 日发布。它将包括属性钩子、JIT 改进,以及在不需要额外括号的情况下链式调用方法。这是一个大变化!

属性钩子 RFC

现代 PHP 历史上最大的变化之一:定义属性钩子的能力。

class BookViewModel
{
public function __construct(
private array $authors,
) {} public string $credits {
get {
return implode(', ', array_map(
fn (Author $author) => $author->name,
$this->authors,
));
}
} public Author $mainAuthor {
set (Author $mainAuthor) {
$this->authors[] = $mainAuthor;
$this->mainAuthor = $mainAuthor;
} get => $this->mainAuthor;
}
}

属性钩子的目标是通过允许每个属性定义自己的 get 和 set 钩子,去除大量的 getter 和 setter。钩子是可选的,不必在特定属性上同时添加两个钩子。例如,只有 get 钩子的属性是虚拟属性。这应该是目前 PHP 8.4 最大的更新了,非常期待,又少写了好多代码

interface HasAuthors
{
public string $credits { get; }
public Author $mainAuthor { get; set; }
}

无需括号的新实例链式调用 RFC

如果属性钩子还不够,PHP 8.4 还有一个功能可以节省大量代码, 那就是不再需要将新实例调用包裹在括号内才能链式调用方法。这个修改个人觉得蛮好的,想到每次都需要这样

$name = (new ReflectionClass($objectOrClass))->getShortName();

现在(php8.4)只需要这样做

$name = new ReflectionClass($objectOrClass)->getShortName();

JIT 改变 RFC

PHP 8.4 改变了启用 JIT 的方式。在 PHP 8.4 之前,必须将 opcache.jit_buffer_size 设置为 0 才能禁用 JIT,但现在可以这样禁用它:

opcache.jit=disable
opcache.jit_buffer_size=64m

用户受到此更改影响的唯一方式是如果他们指定了 opcache.jit_buffer_size 但没有 opcache.jit。在这种情况下,就必须添加 opcache.jit=tracing 来重新启用 JIT

最后,还对 JIT 进行了改进,使其在某些情况下运行更快,并使用更少的内存。

隐式可空类型弃用

PHP 有一个奇怪的行为,带有默认 null 值的类型化变量会自动变为可空类型:

function save(Book $book = null) {}

这种行为现在已被弃用,并将在 PHP9 中删除。解决方案是将 Book 显式设为可空类型:

function save(?Book $book = null) {}

新 DOM HTML5 支持 RFC

PHP 8.4 添加了一个 \Dom\HTMLDocument 类,能够正确解析 HTML5 代码。旧的 \DOMDocument 类仍然可用以保持向后兼容。

$doc = \Dom\HTMLDocument::createFromString($contents);

原文链接

前瞻 PHP8.4 的新特性的更多相关文章

  1. php8.0正式版新特性和性能优化学习

    前言 PHP团队宣布PHP8正式GA(链接).php的发展又开启了新的篇章,PHP8.0.0版本引入了一些重大变更及许多新特性和性能优化机制.火速学习下~ JIT(Just in Time Compi ...

  2. Java 8新特性前瞻

    快端午小长假了,要上线的项目差不多完结了,终于有时间可以坐下来写篇博客了. 这是篇对我看到的java 8新特性的一些总结,也是自己学习过程的总结. 几乎可以说java 8是目前为止,自2004年jav ...

  3. Asp.net Core中SignalR Core预览版的一些新特性前瞻,附源码(消息订阅与发送二进制数据)

    目录 SignalR系列目录(注意,是ASP.NET的目录.不是Core的) 前言 一晃一个月又过去了,上个月有个比较大的项目要验收上线.所以忙的脚不沾地.现在终于可以忙里偷闲,写一篇关于Signal ...

  4. C# 11 的新特性和改进前瞻

    前言 .NET 7 的开发还剩下一个多月就要进入 RC,C# 11 的新特性和改进也即将敲定.在这个时间点上,不少新特性都已经实现完毕并合并入主分支 C# 11 包含的新特性和改进非常多,类型系统相比 ...

  5. Java 9和Java 10的新特性

    http://www.infoq.com/cn/news/2014/09/java9 Java 9新特性汇总 继2014年3月份Java 8发布之后,Open JDK加快了开发速度, Java 9的发 ...

  6. Red Hat OpenStack 10的新特性

    这是Red Hat有史以来最好的版本,同时也是第一个长生命周期版本(最长五年支持),这篇文章会介绍为什么这是你私有云最好的礼物. 由于要使用命令行,以前安装OpenStack是很繁重的工作.这个版本提 ...

  7. Red Hat Enterprise Linux 7.x新特性

    Red Hat Enterprise Linux 7.x新特性 RHEL7新特性简介 1.      RHEL7目前支持架构 64-bit AMD.64-bit Intel.IBM POWER.IBM ...

  8. SQL Server 2014 新特性——内存数据库

    SQL Server 2014 新特性——内存数据库 目录 SQL Server 2014 新特性——内存数据库 简介: 设计目的和原因: 专业名词 In-Memory OLTP不同之处 内存优化表 ...

  9. ElasticSearch 5学习(10)——结构化查询(包括新特性)

    之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request ...

  10. [干货来袭]C#6.0新特性

    微软昨天发布了新的VS 2015 ..随之而来的还有很多很多东西... .NET新版本 ASP.NET新版本...等等..太多..实在没消化.. 分享一下也是昨天发布的新的C#6.0的部分新特性吧.. ...

随机推荐

  1. protocol buffer没那么难,不信你看这篇

    目录 简介 定义一个消息 类型定义 字段的值 字段描述符 添加注释 嵌套类型 Map 总结 简介 上一篇文章我们对google的protobuf已经有了一个基本的认识,并且能够使用相应的工具生成对应的 ...

  2. 带你玩转OpenHarmony AI:打造智能语音子系统

    简介 AI时代,智者当先,判断一个终端设备是否智能,语音能力是必不可缺的.智能家居.智慧厨房.智能汽车等等,一切衣食住行都在往智能方向发展,那我们该如何在OpenAtom OpenHarmony(简称 ...

  3. OpenHarmony将携新成果亮相HDC2022

     第四届华为开发者大会 2022(Together)将于11月4日-6日在东莞召开,OpenAtom OpenHarmony(以下简称"OpenHarmony")将携新生态成果亮相 ...

  4. vue element序号翻页连续排序

    type="index" :index="indexMethod" // 序号翻页连续排序 indexMethod(index) { return (this. ...

  5. failed to push some refs to xxxx

    ***************ssh  秘钥上传远程仓库 1. 添加远程仓库ssh 命令   git remote add origin  git@github.com:ThreeNut/zou.gi ...

  6. 决策树模型(4)Cart算法

    Cart算法 Cart是Classification and regression tree的缩写,即分类回归树.它和前面的ID3, C4.5等算法思想一致都是通过对输入空间进行递归划分并确定每个单元 ...

  7. 51nod 1268

    51nod 1268 基础dfs 题目如下: 给出 N 个正整数组成的数组 A,求能否从中选出若干个,使他们的和 为 K.如果可以,输出:"Yes",否则输出"No&qu ...

  8. 构建动态交互式H5导航栏:滑动高亮、吸顶和锚点导航技巧详解

    功能描述 产品要求在h5页面实现集锚点.吸顶及滑动高亮为一体的功能,如下图展示的一样.当页面滑动时,内容区域对应的选项卡高亮.当点击选项卡时,内容区域自动滑动到选项卡正下方. 布局设计 css 布局 ...

  9. 【Nano Framework ESP32篇】WS2812 彩色灯带实验

    地球人皆知,许多物联网教程作者的心中都深爱着一灯大师,所以第一个例程总喜欢点灯,高级一点的会来个"一闪一闪亮晶晶".老周今天要扯的也是和灯有关的,但不单纯地点个灯,那样实在不好玩, ...

  10. 登录chatgpt的时候出现429的解决方法,亲测有效

    登录chatgpt的时候出现429的解决方法 PS:在2023年3月14日晚还是可以用的,亲测有效 登录chatgpt的时候出现429的解决方法 很多时候在国内用代理进入chatgpt的时候会出现42 ...