h4kuna / serialize-polyfill
提供序列化和使用 igbinary(如果可用)的方法。
v0.2.5
2024-07-31 10:10 UTC
Requires
- nette/utils: >= 3.0
Requires (Dev)
- nette/tester: ^2.4
- phpstan/phpstan: ^1.9
- tracy/tracy: ^2.9
Suggests
- php: >=7.4
- ext-igbinary: to use efficient serialization
- ext-mbstring: for check errors by igbinary
README
在你的项目中,现在有两个新的方法可用。
- 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
- 安装 igbinary 扩展
require __DIR__ . '/vendor/autoload.php'; \h4kuna\Serialize\Serialize::setUp(IgBinary::class);
成功了!
禁用 igbinary
- 在 vendor/autoload.php 之后设置 Php 驱动
require __DIR__ . '/vendor/autoload.php'; // \h4kuna\Serialize\Serialize::setUp(IgBinary::class); remove
- 等待所有数据都被解码
- 卸载 igbinary 扩展