pingyi / json-serializer
混合了两个用于序列化和反序列化PHP变量、对象和闭包的仓库。
v0.1.2
2023-02-01 02:42 UTC
Requires
- php: ^7.4||^8.0
- jeremeamia/superclosure: ^2.4
- laravel/serializable-closure: ^1.2
- zumba/json-serializer: ^3.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.14
- phpstan/phpstan: ^1.9
- phpunit/phpunit: ^9.5
- rector/rector: ^0.15.10
This package is auto-updated.
Last update: 2024-09-04 19:12:59 UTC
README
简介
该仓库通过整合两个仓库(Zumba\JsonSerializer 和 laravel/serializable-closure)为PHP提供变量、对象和闭包的序列化和反序列化功能。
它仍然保留了原始仓库 Zumba\JsonSerializer 的操作,并解决了由于依赖仓库 SuperClosure\Serializer 已停止维护而导致无法序列化 闭包 的问题。
简单来说,该仓库补充了两个仓库的不足,并为PHP对象/闭包序列化提供了完整的解决方案。
安装
先决条件
- PHP 7.4 或 PHP 8^
- Composer
Composer 安装
composer require pingyi/json-serializer
如何使用
序列化数据
您仍然可以使用 Zumba\JsonSerializer 来序列化/反序列化您的变量或对象,它将像
class MyCustomClass { public $isItAwesome = true; protected $nice = 'very!'; } $instance = new MyCustomClass(); $serializer = new Zumba\JsonSerializer\JsonSerializer(); $json = $serializer->serialize($instance); // $json will contain the content {"@type":"MyCustomClass","isItAwesome":true,"nice":"very!"} $restoredInstance = $serializer->unserialize($json); // $restoredInstance will be an instance of MyCustomClass
(来自 Zumba\JsonSerializer)
有关其他更多操作,请参阅 Zumba\JsonSerializer。
序列化闭包
您可能像这样序列化包括闭包在内的数据
use Pingyi\JsonSerializer\ClosureSerializer\ClosureSerializer; use Zumba\JsonSerializer\JsonSerializer; $outsideData = "Jack"; $toBeSerialized = [ "name" => 'N$ck', "arrayData" => [1, 2, 3], "closure_1" => fn (string $s = "Hello") => print_r($s . PHP_EOL), "closure_2" => function (string $s = "Hello") use ($outsideData) { print_r("{$s} {$outsideData}." . PHP_EOL); } ]; $jsonSerializer = new JsonSerializer(new ClosureSerializer()); $serializedData = $jsonSerializer->serialize($toBeSerialized); $unserializedData = $jsonSerializer->unserialize($serializedData); call_user_func($unserializedData["closure_1"]); call_user_func($unserializedData["closure_2"]);
或者包含闭包的类,像这样
use Pingyi\JsonSerializer\ClosureSerializer\ClosureSerializer; use Zumba\JsonSerializer\JsonSerializer; use stdClass; $toBeSerializedClass = new stdClass(); $toBeSerializedClass->name = "Mary"; $toBeSerializedClass->arrayData = [1, 2, 3]; $toBeSerializedClass->closure = function (string $s = "Hello") { print_r("{$s}." . PHP_EOL); }; $jsonSerializer = new JsonSerializer(new ClosureSerializer()); $serializedData = $jsonSerializer->serialize($toBeSerializedClass); $unserializedData = $jsonSerializer->unserialize($serializedData); call_user_func($unserializedData->closure);
此外,您还可以使用 ClosureSerializer
来序列化简单的闭包
$closure = function (string $s = "Hello") { print_r("{$s}." . PHP_EOL); }; $closureSerializer = new ClosureSerializer(); $serializedData = $closureSerializer->serialize($closure); $unserializedData = $closureSerializer->unserialize($serializedData); call_user_func($unserializedData);
此外,您可以在构造 ClosureSerializer()
时设置您的密钥
new ClosureSerializer("your secret key");