omegacms / serializable-closure
Omega CMS 可序列化闭包包
Requires
- php: >=8.2
README
可序列化闭包包提供了一种方便且安全的方式来序列化PHP中的闭包。它允许您序列化和反序列化闭包,即使在不同PHP进程之间也能保留其状态和功能。这在需要存储和检索闭包的场景中特别有用,例如在缓存机制或队列系统中。
工作原理
该包引入了两个主要类:SerializableClosure
和 UnsignedSerializableClosure
。
-
SerializableClosure
:此类旨在为需要额外安全措施的闭包设计。它支持签名序列化,这意味着闭包与一个密钥相关联以增加安全性。签名者可以通过setSecretKey
方法配置。 -
UnsignedSerializableClosure
:此类适用于不需要签名密钥的闭包。它提供了一种简单的方式来序列化闭包,而不需要额外的安全措施。
⚠️ 实验性功能:匿名函数的序列化
注意:此功能为实验性! 我们已添加了对匿名函数序列化的支持,但请注意。此功能被视为实验性,我们建议仅在完全理解其影响的情况下使用。
匿名函数序列化涉及复杂性和潜在风险,其使用应谨慎对待。如果您不确定后果或不需要此功能,建议坚持使用命名函数或闭包进行序列化。
在将此功能纳入代码之前,请确保您了解其影响,并且能够处理可能出现的任何潜在问题。请谨慎操作!
要求
- PHP 8.2 或更高版本
通过Composer安装
要安装包,请将以下内容添加到您的 composer.json
文件中
{ "require": { "omegacms/serializable-closure": "^1.0.0" } }
然后运行
composer install
入门指南
示例1:使用SerializableClosure
和签名
。
use Omega\SerializableClosure\SerializableClosure; // Create a closure. $closure = fn() => 'YOUR_STRING_HERE'; // Set a secret key for signing. SerializableClosure::setSecretKey( 'secret' ); // Serialize the closure $serialized = serialize( new SerializableClosure( $closure ) ); // Unserialize and get the closure. $closure = unserialize( $serialized )->getClosure(); // Print result. echo $closure(); // Output: YOUR_STRING_HERE
示例2:使用UnsignedSerializableClosure
。
use Omega\SerializableClosure\UnsignedSerializableClosure; // Create a closure $closure = fn( $value ) => strtoupper( $value ); // Serialize the closure $serialized = serialize( new UnsignedSerializableClosure( $closure ) ); // Unserialize and get the closure $unserialized = unserialize( $serialized )->getClosure(); // Invoke the closure echo $unserialized( 'hello' ); // Output: HELLO
示例3:使用SerializableClosure
和签名
以及匿名函数
。
use Omega\SerializableClosure\SerializableClosure; // Create a closure. $closure = function() { $anonymousClass = new class { public function getMessage() : string { return "Helloo from anonymous class!"; } }; return $anonymousClass->getMessage(); }; // Serialize $serialized = serialize( new SerializableClosure( $closure ) ); // Unserialize $unserializedClosure = unserialize( $serialized ); //Invoke the closure $result = $unserializedClosure(); echo $result; // Output: Hello from anonymous class!
示例4:使用UnsignedSerializableClosure
和匿名函数
。
use Omega\SerializableClosure\UnsignedSerializableClosure; // Create a closure $anonymousFunction = function( $name ) { return "Hello, $name!"; }; // Create UnsignedSerializableClosure $unsignedClosure = new UnsignedSerializableClosure( $anonymousFunction ); // Serialize $serialized = serialize( $unsignedClosure ); // Deserialize $unserialized = unserialize( $serialized ); // Invoke the closure $result = $unserialized( "Jhon" ); // Echo the closure echo $result; // Output: Hello, Jhon!
贡献
如果您想为OmegaCMS可序列化闭包包做出贡献,请遵循我们的贡献指南。
许可证
本项目是开源软件,根据GNU通用公共许可证v3.0授权。