惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Cybersecurity and Infrastructure Security Agency CISA
WordPress大学
WordPress大学
人人都是产品经理
人人都是产品经理
小众软件
小众软件
博客园 - 【当耐特】
爱范儿
爱范儿
美团技术团队
Jina AI
Jina AI
Hugging Face - Blog
Hugging Face - Blog
博客园 - 聂微东
月光博客
月光博客
宝玉的分享
宝玉的分享
V
V2EX
Blog — PlanetScale
Blog — PlanetScale
Spread Privacy
Spread Privacy
博客园 - 叶小钗
量子位
Security Archives - TechRepublic
Security Archives - TechRepublic
Google DeepMind News
Google DeepMind News
L
LINUX DO - 热门话题
Hacker News - Newest:
Hacker News - Newest: "LLM"
P
Privacy International News Feed
Y
Y Combinator Blog
P
Proofpoint News Feed
NISL@THU
NISL@THU
The Last Watchdog
The Last Watchdog
S
Secure Thoughts
G
Google Developers Blog
Hacker News: Ask HN
Hacker News: Ask HN
Help Net Security
Help Net Security
I
InfoQ
Cisco Talos Blog
Cisco Talos Blog
Google Online Security Blog
Google Online Security Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Recent Announcements
Recent Announcements
Simon Willison's Weblog
Simon Willison's Weblog
Vercel News
Vercel News
Recent Commits to openclaw:main
Recent Commits to openclaw:main
T
Threat Research - Cisco Blogs
GbyAI
GbyAI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
CXSECURITY Database RSS Feed - CXSecurity.com
V
Vulnerabilities – Threatpost
B
Blog
Stack Overflow Blog
Stack Overflow Blog
Microsoft Azure Blog
Microsoft Azure Blog
N
News | PayPal Newsroom
J
Java Code Geeks
Latest news
Latest news
H
Hackread – Cybersecurity News, Data Breaches, AI and More

博客园 - 刘俊涛的博客

qoder-体验分享 50+专家角色+多代理框架,一个人就能建起一支AI 公司 小米突然放大招!2亿 Token 免费领,最后几天冲刺! 这个项目把浏览器“干了30年的事”干掉了:Pretext 为什么突然爆火? 通用商品打标模块实现方案(基于位运算,适配多框架多语言) 后端工程中使用 Model + Trait 设计可复用的数据模型(完整实现示例) 最小阻力之路 U盘打不开 : 文件损坏 : 提示需要格式化?用CHKDSK轻松修复教程 祂看顧麻雀(His Eye Is on the Sparrow)鄭漢良 别再把一切都变成数组了:用迭代器让 JavaScript 既快又省心 Spark性能调优实战笔记 Spark神操作:轻松拿捏公司“历史烂数据”,一人干翻十年脏表 特定血型血液生成的研究进展:化学合成与微生物生产技术路线 禁止直接 update 业务关键字段 非暴力沟通 PHP 8.1+ 引入的 枚举(Enum) 类型 从错误中学习 产品拆解到底怎么做?8步框架,新手产品经理必学干货! 《创作与爱:托芙·扬松传》读书笔记 MongoDB 端口安全加固方案 为什么软件反应特别慢?一次因版本架构错误导致的性能问题排查记录 【Go 语言神器】iota 到底是什么?为什么高手都爱用它?
PHP 8.5 新特性速览:管道操作符、clone with、闭包增强与更多实用功能
刘俊涛的博客 · 2026-02-09 · via 博客园 - 刘俊涛的博客

PHP 8.5 新特性速览:管道操作符、clone with、闭包增强与更多实用功能


  • title: "PHP 8.5 新特性速览:管道操作符、clone with、闭包增强与更多实用功能"
  • description: "本文全面解析 PHP 8.5 新特性,包括管道操作符、clone with 功能、闭包增强、URI 解析器、新数组函数及致命错误回溯优化,让开发者快速掌握升级要点。"
  • tags: ["PHP 8.5", "PHP 新特性", "管道操作符", "clone with", "闭包增强", "URI 解析器"]

PHP 8.5 新特性速览

PHP 8.5 于 2025 年 11 月 20 日发布,本次更新引入了管道操作符(Pipe Operator)、clone with 功能、全新的 URI 解析器等实用特性。下面我们来详细看看这些新功能。


管道操作符(Pipe Operator)

PHP 8.5 新增了管道操作符,使函数链式调用更加简洁。

传统写法可能是这样:

$input = ' Some kind of string. ';

$output = strtolower(
    str_replace(['.', '/', '…'], '',
        str_replace(' ', '-',
            trim($input)
        )
    )
);

使用管道操作符后,可以这样写:

$output = $input
    |> trim(...)
    |> (fn (string $string) => str_replace(' ', '-', $string))
    |> (fn (string $string) => str_replace(['.', '/', '…'], '', $string))
    |> strtolower(...);

这种写法可读性更高,逻辑更直观。


clone with 功能

现在可以在克隆对象的同时赋新值:

final class Book
{
    public function __construct(
        public string $title,
        public string $description,
    ) {}

    public function withTitle(string $title): self
    {
        return clone($this, [
            'title' => $title,
        ]);
    }
}

注意,readonly 属性在外部仍然不能直接克隆修改,需要显式设置为可写。


(void) 强制忽略与 #[NoDiscard] 特性

可以通过 #[NoDiscard] 标记函数返回值必须被使用,否则会触发警告:

#[NoDiscard("你必须使用这个返回值")]
function foo(): string {
    return 'hi';
}

// 警告:
foo();

// 正确:
$string = foo();

如果确实要忽略返回值,可以使用 (void):

(void) foo();

闭包增强

闭包和一等可调用函数现在可以用于常量表达式,支持在属性中定义闭包:

#[SkipDiscovery(static function (Container $container): bool {
    return ! $container->get(Application::class) instanceof ConsoleApplication;
})]
final class BlogPostEventHandlers
{ /* … */ }

注意闭包必须显式标记 static,且不能访问外部变量。


致命错误的回溯信息

PHP 8.5 的致命错误现在会输出完整的回溯(backtrace),便于调试:

Fatal error: Maximum execution time of 1 second exceeded in example.php on line 6
Stack trace:
#0 example.php(6): usleep(100000)
#1 example.php(7): recurse()
...

新增数组工具函数

  • array_first($array):获取数组首个元素
  • array_last($array):获取数组最后一个元素

相比以前使用 array_key_first 和 array_key_last 更简洁。


URI 解析器

PHP 8.5 引入了全新的 URI 解析器,使 URI 处理更加方便:

use Uri\Rfc3986\Uri;

$uri = new Uri('https://tempestphp.com/2.x/getting-started/introduction');
$uri->getHost();
$uri->getScheme();
$uri->getPort();

延迟目标验证属性 #[DelayedTargetValidation]

某些内置属性默认在编译时验证,使用 #[DelayedTargetValidation] 可以将验证延迟到运行时,有助于兼容旧代码:

class Child extends Base
{
    #[DelayedTargetValidation]
    #[Override]
    public const NAME = 'Child';
}

其他小改动

  • 静态属性支持非对称可见性
  • 构造函数属性提升可用于 final 属性
  • #[\Override] 可用于属性
  • Dom\Element 增加 $outerHTML
  • Exif 扩展支持 HEIF/HEIC
  • filter_var() 新增 FILTER_THROW_ON_FAILURE 标志

弃用与破坏性更改

  • 非标准类型转换(如 (boolean)、(integer))弃用
  • 使用反引号作为 shell_exec() 别名弃用
  • 常量重复声明弃用
  • disabled_classes ini 设置移除

完整列表可参考官方 GitHub 页面。


PHP 8.5 带来了很多让开发者更高效的特性,无论是函数链式调用、对象克隆赋值,还是闭包增强,都提升了代码可读性和可维护性。你最期待哪一个新特性呢?

Don’t reinvent the wheel, library code is there to help.

欢迎关注公-众-号【TaonyDaily】、留言、评论,一起学习。