robertlabrie/robertserializer

我的序列化器

dev-master 2015-10-25 14:23 UTC

This package is not auto-updated.

Last update: 2024-09-28 18:15:55 UTC


README

为什么

RobertSerializer的产生源于将对象轻松存储到MongoDB的需求。现有的PHP序列化器适合存储在会话中,但对于文档数据库来说毫无用处。当我询问时,共识似乎是使用所谓的“ODM(对象文档模型)”,它实际上是在Mongo文档和我的PHP类之间的属性映射。我不想维护这样的东西!因此,我提出了RobertSerializer。

它是如何工作的

我利用PHP的反射类递归遍历输入对象属性,并以数组形式返回数据。Mongo喜欢数组,所以这就是为什么它是数组,但你可以轻松地调用json_encode()并将它存储在RavenDB中,如果你这样做的话。

有什么问题吗?

我在反序列化时需要知道你的对象类型,所以我向数组中添加了一个额外的元素__TYPE__(你可以更改它)。因此,使用命名空间是个好主意。此外,如果你更改了类的命名空间,你可能无法反序列化对象。如果有人使用这个并且这成为问题,我们可以让你定义一个映射(糟糕!)这样你就可以在重构中存活下来。

为什么要使用特殊字段?

BSON看起来很丑

如何使用它

composer require RobertSerializer

#do the necessary composer bits
$rs = new \RobertSerializer\RobertSerializer();
$in = new \Example\Foo();
$ser = $rs->serialize($in);
//$ser is an array that you can pass around

$out = $rs->deserialize($ser);
//$out is an instance of Foo(), exactly how you remember it!