编程 PHP 8.6 新增 Time\Duration、clamp() 与 SortDirection:用法与边界

2026-09-27 21:02:49

PHP 8.6 新增 Time\Duration、clamp() 与 SortDirection:用法与边界

PHP 8.6 计划 2026-11-19 GA,目前在 RC 阶段。这一版加进了若干语言与标准库原语,下面按类型逐个说明用法与限制。

Time\Duration

Time\Duration 是 final readonly 类,表示「停止计时器式」的时间间隔,纳秒精度。它提供按单位命名的工厂方法、算术运算、比较,以及从 ISO 8601 duration 字符串构造。

它的定位是统一时长类型:内核函数与新的 Io\Poll 轮询 API 都可以用它,取代此前用裸整数/浮点数分别表示毫秒、秒的做法。

clamp()

clamp() 把值夹在区间内,语义等价于手写的:

min(max($v, $min), $max)

RFC:clamp_v2。

SortDirection 枚举

SortDirection 加到全局命名空间,成员为 Ascending / Descending。

目前内核函数还没有消费它。等未来 sort 类内部函数改用它之后,PHPStan 等静态分析工具能更好地推断排序方向。

RFC:sort_direction_enum。

Readonly 属性默认值

RFC:readonly_property_defaults。

PHP 8.6 之前,编译期就拒绝 readonly 属性带默认值,这让 8.4 引入的 get-only 接口属性难以实现。现在允许带默认值,但这个默认值算作那唯一一次赋值,所以只能和构造器属性提升配合,用于「可覆盖的默认值」。

同时被接受的变更

  • Partial Function Application v2
  • Stream 错误处理改进
  • Secure Session 默认值(session.use_strict_mode、httponly、samesite 翻转)

弃用项包括:is_double()、is_integer()、is_long()、doubleval()、spl_object_hash()、spl_classes()、strcoll()、metaphone() 等。

时间线

阶段时间
Alpha7/2 – 7/30
Beta1(软功能冻结)8/13
Beta39/10
硬功能冻结9/22
RC19/24
RC411/5
GA11/19

发布经理:Daniel Scherzer、Matteo Beccati、Joe Ferguson。

试用

docker run --rm -it php:8.6.0beta3-cli php -v
复制全文 生成海报 PHP 8.6 Time\Duration clamp SortDirection

推荐文章

程序员茄子在线接单