当前位置:首页>php>PHP 标准库 PSL 6.0 发布!

PHP 标准库 PSL 6.0 发布!

  • 2026-09-26 23:24:57
PHP 标准库 PSL 6.0 发布!

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 包现已废弃。请使用以下命令切换:

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

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

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

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 取消就整体取消

其他亮点

  • TaskGroup 和 WaitGroup —— 支持结构化并发
  • 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()。
// 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\TimeoutException、Network\Exception\TimeoutException 等全部移除,统一使用 Async\Exception\CancelledException。

  4. TLS 类名变更TLS\ServerConfig → TLS\ServerConfigurationTLS\ClientConfig → TLS\ClientConfiguration

Bug 修复

  • RetryConnector 的退避睡眠现在尊重取消 token
  • IO\write()、IO\write_line()、Str\format() 等在消息含 % 但没传参数时不再崩溃

最新文章

随机文章