PHP 8.5 将带来什么 🚀

PHP 8.5 将带来什么 🚀

PHP 8.5 仍在开发中;首个正式版本计划于 2025 年 11 月 20 日发布。如果你想尝试,nightly tarballs 和 Docker 镜像(php:8.5.0-dev)已经可用。

新特性

领域 特性
语言语法 管道操作符 `
标准库 array_first(), array_last(), 新的 IntlListFormatter, curl_multi_get_handles(), locale_is_right_to_left()
属性 #[\NoDiscard] + (void) 强制转换
核心调整 Directory 成为不透明/最终类
性能/IO 原生 Zstandard 和 Brotli 压缩

新的语言结构

管道操作符 |>

2025 年 2 月批准,管道将左侧值传递给右侧的可调用对象,并从左到右求值。

php 复制代码
$result  =  "Hello World"
 |>  htmlentities(...)
 |>  str_split(...)
 |>  fn($x) => array_map(strtoupper(...), $x)
 |>  fn($x) => array_filter($x, fn ($v) => $v  !==  'O');

var_dump($result);  // ['H','E','L','L','W','R','D']

Records --- 不可变值对象

record 关键字(RFC 正在讨论中,但趋势积极)让你可以用几乎零样板代码声明按值传递的不可变类型。

php 复制代码
record  Point(int  $x, int  $y);
$origin  =  &Point(0, 0); // 前导的"&"表示记录实例化
echo  $origin->x;          // 0

构造函数属性提升中的 final

很快你就可以将提升的属性标记为 final,保证它们在构造后永不改变。投票已经压倒性地支持。

php 复制代码
class  User
{
	 public  function  __construct(
		final string  $id,
		public  string  $name,
	) {}
}

常量表达式中的闭包

静态闭包现在可以在 const、属性参数和默认属性/参数值中使用 --- 对于默认回调非常方便。已为 8.5 实现。

php 复制代码
const  DEFAULT_FILTER  =  static  function (mixed  $v):  bool {
 return  !empty($v);
};

#[\NoDiscard] + (void) 强制转换

标记必须消耗其返回值的函数;如果你真的想忽略它,可以将调用强制转换为 (void) 以消除警告。

php 复制代码
#[\NoDiscard('You probably meant to use this')]
function  compute():  array
{
 return [...];
}
(void) compute(); // 显式丢弃 -- 无警告

标准库新增内容

✨ 新的 API 为什么你会关心
array_first() / array_last() 在 O(1) 时间内获取第一个或最后一个元素,而不触及内部指针。
curl_multi_get_handles() 枚举 multi-curl 资源中的所有句柄。
IntlListFormatter 支持 i18n 的人性化列表(例如"apples, pears and peaches")。
locale_is_right_to_left() 无需 ICU 查找的快速 RTL 检查。
php --ini=diff CLI 标志,仅打印你调整过的 INI 条目。
PHP_BUILD_DATE 精确的构建时间戳嵌入到二进制文件中。
php 复制代码
$items  = ['🍎','🍐','🍑'];
echo  array_first($items); // 🍎
echo  array_last($items);  // 🍑

引擎和核心库调整

Directory 现在是不透明的

你不能再 new Directory() 或克隆/序列化它;将其视为真正的资源对象。

php 复制代码
$dir  =  dir('.');

clone  $dir;        // 致命错误

new  Directory(); // 致命错误

内置现代压缩

ZstandardBrotli 加入 zlib,为你提供快速、原生的 Web 压缩。

php 复制代码
$zip  =  zstd_compress($data);

$plain  =  brotli_uncompress($zip);

弃用内容

所有 MHASH_* 常量都将被弃用。

随着 8.5 的稳定,预计会有一轮新的小边缘案例清理。

总结

PHP 8.5 不是一个革命性的版本,但它带来了大量的人体工程学改进:

  • 函数式管道,使数据流更清晰
  • 无样板代码的值对象
  • 更安全的 API,引导你远离陷阱
  • 以及许多小而强大的生活质量提升

引用

原文链接

相关推荐
一 乐7 分钟前
绿色农产品销售|基于springboot + vue绿色农产品销售系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·后端·宠物
3***688418 分钟前
Spring Boot中使用Server-Sent Events (SSE) 实现实时数据推送教程
java·spring boot·后端
C***u17622 分钟前
Spring Boot问题总结
java·spring boot·后端
上进小菜猪22 分钟前
基于 YOLOv8 的人体与行人检测智能识别实战 [目标检测完整源码]
后端
Elieal36 分钟前
5 种方式快速创建 SpringBoot 项目
java·spring boot·后端
c***693038 分钟前
Spring Boot实时推送技术详解:三个经典案例
spring boot·后端·状态模式
Mr -老鬼1 小时前
Rust适合干什么?为什么需要Rust?
开发语言·后端·rust
12344522 小时前
Agent入门实战-一个题目生成Agent
人工智能·后端
IT_陈寒2 小时前
Java性能调优实战:5个被低估却提升30%效率的JVM参数
前端·人工智能·后端
快手技术2 小时前
AAAI 2026|全面发力!快手斩获 3 篇 Oral,12 篇论文入选!
前端·后端·算法