前瞻 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. #最大公约数,容斥#洛谷 3166 [CQOI2014]数三角形

    题目 分析 总方案就是\(C(n*m,3)\),考虑减掉不合法的方案, 横向\(n*C(m,3)\),纵向\(m*C(n,3)\)再减去斜着的, 对于\((x_1,y_1)(x_2,y_2),x_1& ...

  2. #线性基,点分治#洛谷 3292 [SCOI2016]幸运数字

    题目 分析 题目就是将\(x\)到\(y\)路径上的线性基合并求解, 这里用的是点分治,每次换根到重心的时候维护前缀线性基, 查询的时候如果属于不同的子树就能询问答案,记得\(x=y\)要特判 代码 ...

  3. 【Insights直播】华为帐号服务,打造全场景安全帐号体系

    在App运营过程中,如何保持用户增长和提升用户体验始终是开发者关注的问题,而作为用户使用体验感知的第一环节--帐号注册登录环节是不可忽视,且有很大提升空间的.如何提升帐号的注册登录体验?如何保证用户在 ...

  4. 国内十大活跃报表 BI 产品深度点评

    目前国内市场上的报表 BI 工具琳琅满目,看起来也各有特点,这给选型工作带来了一些困扰,本文就一些较活跃的报表 BI 产品进行点评,对于不太熟悉这些产品和技术的同学,可作为参考资料. 这里选了十个产品 ...

  5. 重新整理 mysql 基础篇—————表锁和全局锁[六]

    前言 锁从大的方面可以分为: 1.全局锁 2.表锁 3.行锁 正文 全局锁 全局锁就是对整个数据加上读锁. 在mysql 中,加入全局锁的命令就是: Flush tables with read lo ...

  6. Hadoop HDFS 3.2的部署

    之前写过HDFS 2.6的部署,最近项目中尝试使用最新的HDFS 3.2.1做离线存储,部署方式略有不同,所以这里再简单写一下,这里只涉及到存储因此不再配置yarn,只配置HDFS最基本的服务Name ...

  7. 力扣77(Java)-组合(中等)

    题目: 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合. 你可以按 任何顺序 返回答案. 示例 1: 输入:n = 4, k = 2输出:[ [2,4], [3,4], ...

  8. 力扣540(java&python)-有序数组中的单一元素(中等)

    题目: 给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次. 请你找出并返回只出现一次的那个数. 你设计的解决方案必须满足 O(log n) 时间复杂度和 O(1) 空间 ...

  9. 力扣237(java&python)-删除链表中的节点(中等)

    题目: 有一个单链表的 head,我们想删除它其中的一个节点 node. 给你一个需要删除的节点 node .你将 无法访问 第一个节点  head. 链表的所有值都是 唯一的,并且保证给定的节点 n ...

  10. 数据库PolarDB开源之路该如何走?听听他们怎么说

    简介: 10月25日,由阿里云开发者社区.阿里云PolarDB开源社区.InfoQ联合举办的「开源人说」数据库PolarDB专场线下沙龙在杭州召开,5位阿里云数据库超级大咖.10位阿里云数据库开源生态 ...