oire / serializer
数据序列化工具,用于更好的存储和交换。
Requires
- php: >= 7.1
- oire/base64: >= 1.1
Requires (Dev)
- phpunit/phpunit: ^6
Suggests
- ext-igbinary: *
- ext-msgpack: *
This package is not auto-updated.
Last update: 2024-09-28 19:45:53 UTC
README
将各种数据序列化到不同的格式。此外,还有可能将输出编码为URL和文件名安全的base64。
依赖于 Oirë Base64 将二进制数据编码为可存储的格式。
要求
需要PHP 7.1或更高版本,且已启用JSON支持。
需要某些序列化模式额外的PECL扩展,见下文。如果没有PECL可用,并且你的环境中没有安装所需的任何扩展(例如共享托管),则可以自由使用Oirë Serializer与JSON。
安装
通过 Composer
composer require oire/serializer
或手动安装。注意,你需要从 Oirë Base64 获取 base64.php
。
require_once("oire/base64.php"); require_once("oire/serializer.php");
运行测试
在项目目录中运行 phpunit
。
使用示例
将数据序列化为JSON。请注意,你可以依次调用方法或链式调用它们,如下所示
use \Oire\Serializer; $data = ["fruit" => "orange", "vegetable" => "carrot", "money" => 3000, "randomArray" => [1, 2, 3, 4, 5], "Lambë" => "Українська"]; try { // You can pass "j", "json" or 1 to setMode() to get JSON $jsonSerialized = (new Serializer())->setMode("json")->serialize($data); } catch(Exception $e) { // Handle errors }
这将输出
{"fruit":"orange","vegetable":"carrot","money":3000,"randomArray":[1,2,3,4,5],"Lambë":"Українська"}
现在进行反序列化
// Without chaining it will be like this $s = new Serializer(); // You may wrap this also with try...catch $s->setMode("j"); try { $unserialized = $s->unserialize($jsonSerialized); } catch(Exception $e) { // Handle errors }
这将返回原始数组。如果你想得到一个对象,可以将 unserialize()
的第三个参数传递为 false
。
如果将 serialize()
的第二个参数传递为 true
,则序列化数据将额外编码为URL和文件名安全的base64。如果你选择二进制格式(如MessagePack),这可能特别有用。
$msgPackSerialized = (new Serializer())->setMode("mp")->serialize($data, true);
这将输出
haVmcnVpdKZvcmFuZ2WpdmVnZXRhYmxlpmNhcnJvdKVtb25lec0LuKtyYW5kb21BcnJheZUBAgMEBaZMYW1iw6u00KPQutGA0LDRl9C90YHRjNC60LA
支持的序列化模式
目前支持以下模式。请注意,如果模式是二进制的,在序列化期间如果将 $base64
参数保留为 false
,则返回原始二进制字符串,这可能不利于阅读或存储。
- JSON,非二进制。通过将
1
、"j"
或"json"
传递给setMode()
来设置此模式。 - MessagePack,二进制。通过将
2
、"m"
、"mp"
、"msgpack"
或"messagepack"
传递给setMode()
来设置此模式。请注意,应安装相应的 PECL 扩展 以使其工作。 - Igbinary,二进制。通过将
3
、"i"
、"ib"
、"ig"
或"igbinary"
传递给setMode()
来设置此模式。请注意,应安装相应的 PECL 扩展 以使其工作。
方法
这些方法在源文件中有文档说明,但以下给出了它们的描述。
我们建议将每个调用都包裹在 try...catch
中,因为 Oirë Serializer 在出错时会抛出异常。
- 类构造函数 - 你可以在调用构造函数时提供序列化模式,或者直接调用
setMode()
。 setMode(int|string $mode)
- 接受模式的数字表示或可读字符串,如"json"
。参见上面的“支持的模式”部分。链式调用,因此返回当前类实例。getMode(bool $asString = false): int|string
— 获取由setMode()
设置的当前序列化模式。如果$asString
设置为true
,则返回可读的模式名称,如"json"
,否则返回数字表示(这是默认行为)。如果模式未设置或无法找到,则抛出异常。getAvailableModes(bool $json = false): array|string
— 获取所有可用的序列化模式。如果$json
参数设置为true
,则作为 JSON 字符串返回,否则返回关联数组(这是默认行为)。serialize(mixed $data, bool $base64 = false): string
— 根据使用setMode()
设置的序列化模式序列化给定数据。如果$base64
设置为true
,则将序列化数据编码为 URL 和文件名安全的 base64(特别适用于 MessagePack 等二进制序列化格式)。如果设置为false
(默认),则将序列化数据作为字符串返回,无论它是二进制还是文本。unserialize(string $data, bool $base64 = false, bool $assoc = true): mixed
— 根据使用setMode()
设置的序列化模式反序列化给定数据。如果$base64
设置为true
,则假定数据在序列化后已经额外编码为 URL 安全的 base64。如果$assoc
设置为true
(默认),则返回关联数组,否则返回对象。注意,最后一个参数仅适用于 JSON 序列化。
许可证
版权所有 © 2017,Andre Polykanine,又名 Menelion Elensúlë。
本软件受 MIT 许可证许可。