h4kuna/serialize-polyfill

提供序列化和使用 igbinary(如果可用)的方法。

v0.2.5 2024-07-31 10:10 UTC

This package is auto-updated.

Last update: 2024-08-31 10:20:58 UTC


README

Downloads this Month Latest stable

在你的项目中,现在有两个新的方法可用。

  • h4kuna\Serialize\Serialize::encode()
  • h4kuna\Serialize\Serialize::decode()

如果你启用了 igbinary 扩展,那么将自动使用 Driver\IgBinary。或者,你可以通过 Driver 接口定义自己的实现。

使用 Serialize 类的示例

在许多用例中,igbinary 更快。任何人都可以在第三方库中使用 h4kuna\Serialize\Serialize::encode/decode。如果你启用了 igbinary,并且对于这个第三方案例你想禁用它并使用标准序列化,请看示例。

外部库在 vendor 中

namespace Com\Example;

use h4kuna\Serialize\Serialize;

class Foo implements \Serializable {
    public function serialize(): ?string {
        return Serialize::encode($this, __CLASS__);
    }

    public function unserialize(string $data): void {
        Serialize::decode($data, __CLASS__);
        // do anything
    }
}

为上述类启用标准序列化。

use h4kuna\Serialize\Driver;
use h4kuna\Serialize\Serialize;

require_once __DIR__ . '/vendor/autoload.php';
Serialize::setUp(Driver\IgBinary::class, [
    Com\Example\Foo::class => Driver\Php::class // only for Com\Example\Foo use case
]); 

兼容性

你使用 php serialize 并且想要使用 igbinary。你可以在运行时启用 igbinary,并且旧序列化的数据将使用旧的 php serialize 进行解码。

支持兼容性,如果你有通过 php serialize 序列化的数据,则可以通过 IgBinary::decode() 进行解码,反之亦然。

启用 igbinary

  1. 安装 igbinary 扩展
require __DIR__ . '/vendor/autoload.php';
\h4kuna\Serialize\Serialize::setUp(IgBinary::class);

成功了!

禁用 igbinary

  1. 在 vendor/autoload.php 之后设置 Php 驱动
require __DIR__ . '/vendor/autoload.php';
// \h4kuna\Serialize\Serialize::setUp(IgBinary::class); remove
  1. 等待所有数据都被解码
  2. 卸载 igbinary 扩展