oire/serializer

数据序列化工具,用于更好的存储和交换。

v1.1 2017-05-01 21:52 UTC

This package is not auto-updated.

Last update: 2024-09-28 19:45:53 UTC


README

Build Status MIT License

将各种数据序列化到不同的格式。此外,还有可能将输出编码为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 许可证许可。