这是 PHP Standard Library (PSL) 项目有史以来最大的一次发布。新地址、新包结构、新功能。
PSL 已经搬家了。仓库、组织、网站全部换了新地址:
原来的 azjezz/psl 包现已废弃。请使用以下命令切换:
composer require php-standard-library/php-standard-library
命名空间保持不变,永远都是 Psl\。
PSL 现在被拆分成 61 个可独立安装的包,你不再需要引入整个库。
composer require php-standard-library/typecomposer require php-standard-library/tcpcomposer require php-standard-library/uri每个包都只声明自己真正需要的依赖,所以你只安装实际用到的部分。
当然,如果你还是想要全家桶,也可以继续用:
composer require php-standard-library/php-standard-library
全部 61 个包都放在 php-standard-library 这个 GitHub 组织下面,每个包都有独立的只读拆分仓库供 Composer 使用。
完整支持 RFC 标准的资源标识符处理:
独立的 RFC 3492 Punycode 编解码,用于国际化域名。
全面替换原来的 Duration $timeout 参数模式,所有异步/IO 操作现在使用统一的取消机制:
CancellationTokenInterface —— 基础接口TimeoutCancellationToken —— 超时自动取消SignalCancellationToken —— 手动触发取消LinkedCancellationToken —— 任意一个子 token 取消就整体取消TaskGroup 和 WaitGroup —— 支持结构化并发TLS\Listener —— 可以给任意 Listener 包一层 TLSTCP\RestrictedListener —— 支持基于 IP/CIDR 的访问控制Network\CompositeListener —— 同时监听多个地址BufferedReadHandleInterface 新增 readByte()、readLine()、readUntil() 等方法这是一个大版本,包含大量破坏性变更,最重要的几点:
// 5.x 写法
$data = $reader->read(timeout: Duration::seconds(5));
// 6.0 写法
$data = $reader->read(cancellation: new Async\TimeoutCancellationToken(Duration::seconds(5)));
$camelCase 风格。TCP\listen()、TCP\connect()、Unix\listen()、UDP\Socket::bind()、Socks\Connector 等都改用配置对象,不再是散列参数。IO\Exception\TimeoutException、Network\Exception\TimeoutException 等全部移除,统一使用 Async\Exception\CancelledException。TLS\ServerConfig → TLS\ServerConfiguration
TLS\ClientConfig → TLS\ClientConfigurationIO\write()、IO\write_line()、Str\format() 等在消息含 % 但没传参数时不再崩溃