实用函数包
这 60 个包补的是语言标准库层面的日常函数:文本处理、校验与安全、数据结构与并发、协议与归档、数据库与解析。它们大多对应 PHP 的内置函数与扩展,从 PHP 迁过来的代码能直接找到替代。本站这 6 页给的是实际用法:每一段输出都是在 0.2.382 上跑出来的原文,跑不通或会坑人的地方都标出来了。
@0.2.0 或 @^0.2.0。会踩的边界集中在返回值形态上(uu_decode 返 bytes、dp_format 返 list、dbal 用 db_* 前缀),速查见 包使用边界。这页讲什么
生态包原本偏重「服务端基础设施」——数据库、HTTP、缓存、编解码。这一批补的是另一半:日常写业务代码时反复需要的那些函数。装法、import 写法与其它包没有区别,难点在「名字对得上、行为不一定对得上」,所以下面每个结论都配了可重跑的脚本。
这些包共 61 个 .px 文件、9,837 行;其中 14 个已到 0.2.0。参考页「可用版本」一行写明了每个包有哪几版,装之前对一下。每个包的函数清单在 生态包总览 里按分类查。
安装与验证
装包必须写版本范围(裸名 pxpkg add arrutil 会直接报错):@0.2.0 是精确版本,@^0.2.0 在同一大版本内取最新。semver 是 node-semver 语义:主版本为 0 时次版本号就是 breaking 边界,^0.1.0 的上界是 0.2.0(开区间)。
pxpkg init # 项目根目录,产生 px.toml 与 .px_modules/ pxpkg add arrutil@0.1.0 # 只有 0.1.0 的包写精确版本 pxpkg add aescbc@0.2.0 # 已到 0.2.0 的包写 0.2.0 pxpkg install # 装到 .px_modules/<pkg>/<pkg>.px,写 px.pkg.lock pxpkg list # 核对装了什么
import arrutil # 裸名:从 .px_modules/ 命中
装完必须验一次「能不能 import」,而不是只看 pxpkg install 的返回码:装成功 ≠ 能加载。包内若有跨目录的相对 import,装进 .px_modules/ 后路径会断,严格模块模式直接报 E3005;这条检查对任何包都成立。
# 最小冒烟:每个包装完都导一次
px run --fast smoke.px--fast 从 0.2.379 起已经能解析 import 了这正是它成为装包冒烟最佳工具的原因:编译失败会明确报 E3005 找不到模块并不回落解释轨;而纯解释轨对同样的错写法只打一行警告、照常跑下去(工具链 有对拍)。按用途分类
| 分类 | 包数 | 包 |
|---|---|---|
| 文本与格式化 | 13 | arrutil · compact · ctype · multisort · numconv · phonetic · simtext · sprintf · strpad · textfmt · vardump · cldr · gettext |
| 数据格式与编解码 | 12 | jsonschema · mimebuilder · phpser · phar · uuencode · rssbuilder · vcard · domlite · xmlstream · xpath · soap · xmlrpc |
| 并发与通用模式 | 6 | outbuf · errorhandler · channel · promise · eventloop · connpool |
| 认证与安全 | 5 | aescbc · descrypt · hashutil · csrf · htmlsanitizer |
| 网络与协议 | 5 | ldap · snmp · ntp · whois · memcached |
| 数据库 | 4 | dbal · querybuilder · orm · migration |
| 数学与统计 | 4 | mathx · currency · finance · geo |
| 数据结构 | 3 | advstruct · splstruct · deepmerge |
| Web 与 HTTP | 2 | session · scraper |
| 时间与日历 | 2 | dateperiod · strtotime |
| 图形与媒体 | 2 | colorutil · exif |
| 可观测与测试 | 1 | snapshot |
| 文件系统 | 1 | fileinfo |
PHP 函数 → 普贤包
这些包大多对应 PHP 的内置函数与扩展,迁移时可以直接照这张表找。左边是旧代码里用的函数,右边是替代包;没列到的,去 生态包总览 按分类找。
| PHP | 普贤包 | 备注 |
|---|---|---|
array_flip / array_column / array_chunk | arrutil | 函数名 arr_*,键统一转字符串 |
compact / extract | compact | cp_compact / cp_extract |
ctype_digit / ctype_alpha … | ctype | 另有单字符版 ct_is_* |
array_multisort | multisort | 用 ms_sort_by(rows, keys, orders) 更省事 |
base_convert / decbin / dechex | numconv | 支持到 64 进制 + 罗马数字 |
soundex / metaphone | phonetic | 另含 NYSIIS |
similar_text / levenshtein | simtext | st_similar 返回百分比(float) |
sprintf | sprintf | 宽度/零填充按 C 语义:%08.3f → 0003.500 |
str_pad / str_repeat / substr | strpad | sp_pad / sp_repeat / sp_truncate |
nl2br / wordwrap / quoted_printable_encode | textfmt | tf_* |
var_dump / var_export / print_r | vardump | vd_dump / vd_export / vd_print_r |
number_format / setlocale | cldr | 复数规则比数字格式完整 |
gettext / ngettext | gettext | 解析 .po 文本,含 .mo 编译 |
$_SESSION / session_start | session | 纯内存状态,落盘自管 |
htmlspecialchars / HTMLPurifier | htmlsanitizer | 按结构解析属性,事件属性与危险协议整条删 |
json-schema 校验 | jsonschema | 支持 required / minimum / enum |
ob_start / ob_get_clean | outbuf | 支持嵌套层级 |
set_error_handler | errorhandler | eh_trigger 是手动的,不接管运行时错误 |
mail() / PHPMailer | mimebuilder | 只构造 MIME 文本,发信仍用 smtp 包 |
serialize / unserialize | phpser | 不支持对象与引用 |
Phar | phar | 构造/解析清单,不做真实归档文件 |
convert_uuencode | uuencode | uu_decode 返 bytes,要 list[int] 用 uu_decode_list |
SimplePie / RSS | rssbuilder | RSS 2.0 与 Atom 双向 |
vCard / iCalendar | vcard | 行折叠、转义都实现了 |
DOMDocument / SimpleXML / XPath | domlite + xpath + xmlstream | 三个包分工:建树 / 查询 / 流式读写 |
PDO / Query Builder | dbal / querybuilder | dbal 是 db_*、querybuilder 是 qb_*,可同文件共存 |
DB migration | migration | 纯计划生成,执行 SQL 自己来 |
DatePeriod / strtotime | dateperiod / strtotime | 日期区间与英文相对时间(+1 day / next monday) |
PMT / NPV / IRR | finance | 单点函数与摊销表(payment = interest + principal) |
货币换算 | currency | 汇率键写 "USD->CNY"(斜杠/空格/嵌套也认) |
haversine / 坐标转换 | geo | 含 WGS84↔GCJ02↔BD09、GeoHash |
SplDoublyLinkedList / SplFixedArray | splstruct | dll_* / fa_* |
array_replace_recursive | deepmerge | 另含点分路径读写 |
exif_read_data | exif | 只解析 TIFF/EXIF 字节,不解整张图 |
SplFileInfo | fileinfo | 纯路径运算,不碰磁盘 |
file_get_contents + 正则抓页面 | scraper | 提取链接/图片/标题/meta |
LDAP / SNMP / NTP / Whois | ldap / snmp / ntp / whois | 只构造与解析协议包,收发自己来 |
Memcached 文本协议 | memcached | 构造与解析;长度按字节算,二进制值用 mc_build_set_bytes |
color / 取色 | colorutil | HEX/RGB/HSL/HSV 互转、对比度、混色 |
math 扩展(双曲/阶乘) | mathx | mx_* |
hash / crc32 / murmur | hashutil | 13 种校验与非加密哈希 |
openssl AES-CBC | aescbc | CBC/CTR 与 openssl 逐字节一致,加解密返 bytes |
DES / RC4 | descrypt | RC4 完整可用,DES 是简化教学版 |
五个实战页
实测环境与口径
语言 px 0.2.382,registry 195 包(/usr/share/puxian/registry),包管理器 pxpkg 0.1.0。所有示例用 px run(解释轨)执行,与 --fast 逐字节一致;涉及字节、图片、协议包的场景标注了需要编译轨的地方。