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() 等。
时间线
| 阶段 | 时间 |
|---|---|
| Alpha | 7/2 – 7/30 |
| Beta1(软功能冻结) | 8/13 |
| Beta3 | 9/10 |
| 硬功能冻结 | 9/22 |
| RC1 | 9/24 |
| RC4 | 11/5 |
| GA | 11/19 |
发布经理:Daniel Scherzer、Matteo Beccati、Joe Ferguson。
试用
docker run --rm -it php:8.6.0beta3-cli php -v