首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >PHP 标准库 PSL 6.0 发布!

PHP 标准库 PSL 6.0 发布!

作者头像
Tinywan
发布2026-07-01 15:18:03
发布2026-07-01 15:18:03
1010
举报
文章被收录于专栏:开源技术小栈开源技术小栈

PSL 6.0.0

这是 PHP Standard Library (PSL) 项目有史以来最大的一次发布。新地址、新包结构、新功能。

新地址

PSL 已经搬家了。仓库、组织、网站全部换了新地址:

  • 仓库:https://github.com/php-standard-library/php-standard-library (原来是 azjezz/psl)
  • 网站:https://php-standard-library.dev/ (原来是 psl.carthage.software)
  • Packagist:php-standard-library/php-standard-library (原来是 azjezz/psl)

原来的 azjezz/psl 包现已废弃。请使用以下命令切换:

代码语言:javascript
复制
composer require php-standard-library/php-standard-library

命名空间保持不变,永远都是 Psl\

拆分成 61 个独立包

PSL 现在被拆分成 61 个可独立安装的包,你不再需要引入整个库。

  • 只想要类型安全的类型转换? → composer require php-standard-library/type
  • 要写异步 TCP 服务器? → composer require php-standard-library/tcp
  • 需要处理 URI? → composer require php-standard-library/uri

每个包都只声明自己真正需要的依赖,所以你只安装实际用到的部分。

当然,如果你还是想要全家桶,也可以继续用:

代码语言:javascript
复制
composer require php-standard-library/php-standard-library

全部 61 个包都放在 php-standard-library 这个 GitHub 组织下面,每个包都有独立的只读拆分仓库供 Composer 使用。

新增的重要组件

URI / IRI / URL 处理

完整支持 RFC 标准的资源标识符处理:

  • URI:RFC 3986 解析、规范化、引用解析、RFC 6570 URI Template(1-4 级)扩展
  • IRI:RFC 3987 国际化资源标识符,支持 Unicode、Punycode、IDNA 2008
  • URL:严格的 URL 类型,带 scheme/authority 校验,默认端口自动剥离

Punycode

独立的 RFC 3492 Punycode 编解码,用于国际化域名。

新的取消机制(Cancellation Tokens)

全面替换原来的 Duration $timeout 参数模式,所有异步/IO 操作现在使用统一的取消机制:

  • CancellationTokenInterface —— 基础接口
  • TimeoutCancellationToken —— 超时自动取消
  • SignalCancellationToken —— 手动触发取消
  • LinkedCancellationToken —— 任意一个子 token 取消就整体取消

其他亮点

  • TaskGroupWaitGroup —— 支持结构化并发
  • QuotedPrintable 和 EncodedWord 编码(RFC 2045 / 2047)
  • 支持流式处理的 Base64 / Hex / QuotedPrintable IO 句柄
  • TLS\Listener —— 可以给任意 Listener 包一层 TLS
  • TCP\RestrictedListener —— 支持基于 IP/CIDR 的访问控制
  • Network\CompositeListener —— 同时监听多个地址
  • BufferedReadHandleInterface 新增 readByte()readLine()readUntil() 等方法
  • TCP、Unix、UDP、Socks 等都改用配置对象

重大破坏性变更(Breaking Changes)

这是一个大版本,包含大量破坏性变更,最重要的几点:

  1. 取消机制替换超时参数所有原来的 null|Duration timeout 都变成了 CancellationTokenInterface cancellation = new NullCancellationToken()。
代码语言:javascript
复制
// 5.x 写法
$data = $reader->read(timeout: Duration::seconds(5));

// 6.0 写法
$data = $reader->read(cancellation: new Async\TimeoutCancellationToken(Duration::seconds(5)));
  1. 命名规范统一为 camelCase 所有变量、参数、属性都改为 $camelCase 风格。
  2. 配置对象化 TCP\listen()TCP\connect()Unix\listen()UDP\Socket::bind()Socks\Connector 等都改用配置对象,不再是散列参数。
  3. 超时异常被移除 IO\Exception\TimeoutExceptionNetwork\Exception\TimeoutException 等全部移除,统一使用 Async\Exception\CancelledException
  4. TLS 类名变更 TLS\ServerConfigTLS\ServerConfiguration TLS\ClientConfigTLS\ClientConfiguration

Bug 修复

  • RetryConnector 的退避睡眠现在尊重取消 token
  • IO\write()IO\write_line()Str\format() 等在消息含 % 但没传参数时不再崩溃
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-03-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源技术小栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PSL 6.0.0
  • 新地址
  • 拆分成 61 个独立包
  • 新增的重要组件
    • URI / IRI / URL 处理
    • Punycode
    • 新的取消机制(Cancellation Tokens)
  • 其他亮点
  • 重大破坏性变更(Breaking Changes)
  • Bug 修复
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档