PHP Standard Library (PSL) 5.0 正式发布。作为 PHP 社区中专注于类型安全和异步编程的标准库,这次更新在架构上进行了大规模重构,引入了包括加密、二进制处理、网络栈重写在内的多个组件。

由于 PSL 5.0 明确要求 PHP 8.4+ 版本,开发者在本地调试时可能会遇到环境限制。如果需要快速搭建 PHP 8.4 环境,可以使用 ServBay。
ServBay 支持多个 PHP 版本同时运行,能够一键安装 PHP 环境,并且能随时切换,方便在不影响现有项目的前提下测试 PSL 5.0 的新特性。

强类型数据校验
PSL 的类型组件不依赖反射,而是通过组合子的方式验证数据。这在处理不可信的外部输入时,能够确保数据符合预期的结构。
php
use Psl\Type;
// 定义一套用户信息校验规则
$schema = Type\shape([
'id' => Type\positive_int(),
'email' => Type\non_empty_string(),
'active' => Type\bool(),
'meta' => Type\optional(Type\dict(Type\string(), Type\mixed())),
]);
// 校验并获得类型完备的数据
$validatedData = $schema->coerce($inputPayload);
结构化并发模型
PSL 5.0 继续深化基于 Fiber 的并发模型。开发者可以像编写同步代码一样处理异步任务,避开了传统回调或 Promise 嵌套带来的复杂性。
php
use Psl\Async;
use Psl\TCP;
use Psl\IO;
Async\main(static function(): int {
// 并发执行多个网络请求
[$clientA, $clientB] = Async\concurrently([
static fn() => TCP\connect('service-a.internal', 8000),
static fn() => TCP\connect('service-b.internal', 9000),
]);
IO\write_error_line('所有连接均已建立成功');
return 0;
});
函数式集合操作
针对 PHP 原生数组在索引和关联类型上的模糊定义,PSL 提供了 Vec(列表)和 Dict(字典)组件。这些组件通过纯函数处理数据,返回类型更加明确。
php
use Psl\Vec;
use Psl\Dict;
use Psl\Str;
$users = ['nick', 'john', 'alice'];
// 统一转为大写
$upperNames = Vec\map($users, Str\uppercase(...));
// 过滤掉长度不足的名称
$filtered = Vec\filter($users, fn($u) => Str\length($u) >= 4);
// 构建键值对映射
$mapping = Dict\pull($users, fn($u) => Str\reverse($u), fn($u) => $u);
生产级网络原语
PSL 5.0 重写了底层的网络栈。无论是 TCP、UDP 还是 Unix Socket,所有的网络操作都支持异步非阻塞模式,并且提供了更加安全的 TLS 支持。
php
use Psl\Async;
use Psl\TCP;
use Psl\IO;
Async\main(static function(): int {
$socket = TCP\listen('0.0.0.0', 9001);
IO\write_error_line('服务器已在 9001 端口启动');
while ($connection = $socket->accept()) {
Async\run(static function() use ($connection) {
$connection->writeAll("Welcome to PSL Server\n");
$connection->close();
})->ignore();
}
});
全功能工业级加密库
新版本引入了基于 libsodium 的加密组件,涵盖了对称与非对称加密、数字签名以及密钥派生等功能。这些 API 的设计遵循了"难以误用"的原则。
php
use Psl\Crypto\Symmetric;
// 快速生成密钥并进行数据加密
$key = Symmetric\generate_key();
$secretMessage = Symmetric\seal('需要保护的原始数据', $key);
// 解密还原数据
$original = Symmetric\open($secretMessage, $key);
PSL 5.0 的发布为 PHP 开发者提供了一套更严谨、更具现代感的底层工具链。开发者可以低成本地将这些新技术应用到实际的研发工作中。