疯狂餐厅
86.88M · 2026-03-21
PHP Standard Library (PSL) 5.0 正式发布。作为 PHP 社区中专注于类型安全和异步编程的标准库,这次更新在架构上进行了大规模重构,引入了包括加密、二进制处理、网络栈重写在内的多个组件。
由于 PSL 5.0 明确要求 PHP 8.4+ 版本,开发者在本地调试时可能会遇到环境限制。如果需要快速搭建 PHP 8.4 环境,可以使用 ServBay。
ServBay 支持多个 PHP 版本同时运行,能够一键安装 PHP 环境,并且能随时切换,方便在不影响现有项目的前提下测试 PSL 5.0 的新特性。
PSL 的类型组件不依赖反射,而是通过组合子的方式验证数据。这在处理不可信的外部输入时,能够确保数据符合预期的结构。
use PslType;
// 定义一套用户信息校验规则
$schema = Typeshape([
'id' => Typepositive_int(),
'email' => Typenon_empty_string(),
'active' => Typebool(),
'meta' => Typeoptional(Typedict(Typestring(), Typemixed())),
]);
// 校验并获得类型完备的数据
$validatedData = $schema->coerce($inputPayload);
PSL 5.0 继续深化基于 Fiber 的并发模型。开发者可以像编写同步代码一样处理异步任务,避开了传统回调或 Promise 嵌套带来的复杂性。
use PslAsync;
use PslTCP;
use PslIO;
Asyncmain(static function(): int {
// 并发执行多个网络请求
[$clientA, $clientB] = Asyncconcurrently([
static fn() => TCPconnect('service-a.internal', 8000),
static fn() => TCPconnect('service-b.internal', 9000),
]);
IOwrite_error_line('所有连接均已建立成功');
return 0;
});
针对 PHP 原生数组在索引和关联类型上的模糊定义,PSL 提供了 Vec(列表)和 Dict(字典)组件。这些组件通过纯函数处理数据,返回类型更加明确。
use PslVec;
use PslDict;
use PslStr;
$users = ['nick', 'john', 'alice'];
// 统一转为大写
$upperNames = Vecmap($users, Struppercase(...));
// 过滤掉长度不足的名称
$filtered = Vecfilter($users, fn($u) => Strlength($u) >= 4);
// 构建键值对映射
$mapping = Dictpull($users, fn($u) => Strreverse($u), fn($u) => $u);
PSL 5.0 重写了底层的网络栈。无论是 TCP、UDP 还是 Unix Socket,所有的网络操作都支持异步非阻塞模式,并且提供了更加安全的 TLS 支持。
use PslAsync;
use PslTCP;
use PslIO;
Asyncmain(static function(): int {
$socket = TCPlisten('0.0.0.0', 9001);
IOwrite_error_line('服务器已在 9001 端口启动');
while ($connection = $socket->accept()) {
Asyncrun(static function() use ($connection) {
$connection->writeAll("Welcome to PSL Servern");
$connection->close();
})->ignore();
}
});
新版本引入了基于 libsodium 的加密组件,涵盖了对称与非对称加密、数字签名以及密钥派生等功能。这些 API 的设计遵循了“难以误用”的原则。
use PslCryptoSymmetric;
// 快速生成密钥并进行数据加密
$key = Symmetricgenerate_key();
$secretMessage = Symmetricseal('需要保护的原始数据', $key);
// 解密还原数据
$original = Symmetricopen($secretMessage, $key);
PSL 5.0 的发布为 PHP 开发者提供了一套更严谨、更具现代感的底层工具链。开发者可以低成本地将这些新技术应用到实际的研发工作中。