frodeborli/serializor
Composer 安装命令:
composer require frodeborli/serializor
包简介
PHP Serializor will serialize almost anything in PHP, including closures and anonymous classes.
README 文档
README
Serialize closures and anonymous classes
Serializor is a PHP library that allows you to serialize closures, anonymous classes, and arbitrary data - without wrapper classes or code modifications.
Key features:
- serialize closures without wrapper classes
- serialize anonymous classes
- works with readonly properties - no
__serialize()required - works with typed
Closureproperties (public readonly Closure $handler) - handles circular and recursive references
- supports WeakReference and WeakMap with correct weak semantics
- supports SPL classes (ArrayObject, SplObjectStorage, SplDoublyLinkedList, etc.)
- supports DateTime classes
- extensible via custom transformers
- optional HMAC signing for secure cross-machine serialization
- does not rely on PHP extensions (no FFI or similar dependencies)
- supports PHP 8.2 - 8.5
Example: Closure serialization
use Serializor\Serializor; $greet = fn($name) => "Hello, $name!"; $serialized = Serializor::serialize($greet); $restored = Serializor::unserialize($serialized); echo $restored('World'); // Hello, World!
Example: Anonymous class serialization
use Serializor\Serializor; $obj = new class("Hello from anonymous class!") { public function __construct(private string $message) {} public function greet(): string { return $this->message; } }; $serialized = Serializor::serialize($obj); $restored = Serializor::unserialize($serialized); echo $restored->greet(); // Hello from anonymous class!
Example: Readonly properties (no class modifications)
use Serializor\Serializor; class MyService { public readonly Closure $handler; public function __construct() { $this->handler = fn($x) => $x * 2; } } $service = new MyService(); $serialized = Serializor::serialize($service); // Just works $restored = Serializor::unserialize($serialized); echo ($restored->handler)(21); // 42
Installation
Serializor is available on Packagist and can be installed via Composer:
composer require frodeborli/serializor
Requirements
- PHP >= 8.2
Security
By default, Serializor does not sign serialized data. For production use, especially in distributed systems or job queues, you should set a shared secret:
use Serializor\Serializor; Serializor::setDefaultSecret('your-shared-secret');
When a secret is set, all serialized data is HMAC-signed to prevent tampering.
Custom Serializers
For types that need special handling (like database connections that must be reconnected), you can register custom serialization logic:
use Serializor\Stasis; Stasis::registerFactory(PDO::class, function (PDO $pdo): MyPDOStasis { return MyPDOStasis::fromPDO($pdo); });
See tests/Transformers/CustomTransformerTest.php for a complete example.
Comparison with Other Libraries
| Feature | Serializor | opis/closure 4.x | laravel/serializable-closure |
|---|---|---|---|
| Closure serialization | Yes | Yes | Yes |
| Anonymous class serialization | Yes | Yes | No |
| No wrapper classes required | Yes | Yes | No |
Readonly Closure properties |
Yes | Requires __serialize() |
No |
| WeakReference / WeakMap | Yes | Yes | No |
| SplObjectStorage | Yes | Yes | No |
| HMAC signing | Yes | Yes | Yes |
| Test coverage | 277 tests | ~70 tests | ~130 tests |
Serializor's advantages:
- Works with typed readonly properties and third-party objects without any class modifications
- Most comprehensive test suite covering edge cases from opis/closure GitHub issues
- Supports PHP 8.2-8.5 features including property hooks and pipe operator
Migrating from Laravel or Opis
Serializor can unserialize data that was serialized by laravel/serializable-closure or opis/closure, providing a seamless upgrade path. The original library must remain installed for deserialization to work:
use Serializor\Serializor; // Data serialized with Laravel or Opis can be unserialized with Serializor // (requires the original library to be installed) $closure = Serializor::unserialize($legacySerializedData); // Re-serialize with Serializor - no longer requires the old library $newSerializedData = Serializor::serialize($closure);
This allows gradual migration: keep the old library installed while transitioning, then remove it once all stored data has been re-serialized with Serializor.
Known Limitations
- Anonymous classes extending internal PHP classes (stdClass, ArrayObject) cannot be serialized
- Multiple closures on the same line with identical signatures cannot be distinguished (PHP limitation)
History
Serializor was first released on September 5, 2024, introducing a novel architecture for PHP closure serialization: direct serialization without wrapper classes, stream wrapper-based reconstruction, WeakMap + ReflectionReference cycle detection, and an extensible transformer system.
Four months later, Opis/Closure v4.0.0 (December 2024) was released as a "complete rewrite" featuring remarkably similar architectural choices. For a detailed technical comparison, see DESIGN.md.
Performance
License
Serializor is licensed under the MIT License.
frodeborli/serializor 适用场景与选型建议
frodeborli/serializor 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 391 次下载、GitHub Stars 达 19, 最近一次更新时间为 2024 年 09 月 05 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「serialize」 「serialization」 「SerializableClosure」 「opis closure」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 frodeborli/serializor 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 frodeborli/serializor 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 frodeborli/serializor 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
LazyPDO is a set of wrappers over PHP's standard PDO and PDOStatement classes. It enables lazy loading, serialization and decoration.
Fork of jms/serializer 1.14.1 with support for modern PHP versions.
Transform data structures
De/normalize business objects without tightly coupling them to your normalization format
Lightweight PHP library that allows exchanging binary data with Qt programs (QDataStream)
Runn Me! Serialization Library
统计信息
- 总下载量: 391
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 19
- 点击次数: 10
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2024-09-05