mindplay / jsonfreeze
JSON序列化库
1.3.1
2016-07-20 19:07 UTC
Requires
- php: >=5.3.0
Requires (Dev)
- mindplay/testies: dev-master
README
将PHP对象图序列化到JSON字符串表示,或将JSON字符串表示反序列化为PHP对象图。
概述
此库可以将完整的PHP对象图序列化到JSON字符串表示,或将JSON字符串表示反序列化为PHP对象图。
此库与例如 json_encode()
、serialize()
、var_export()
等现有序列化库在许多重要方面有所不同。
最重要的是理解,此库旨在存储自包含的对象图 - 它不支持共享或循环的对象引用。这是出于设计考虑,并符合良好的DDD设计实践。具有共享或循环引用的对象图不能直接存储为JSON,因为JSON数据格式是一个树,而不是一个图。
用法
很简单。
use mindplay\jsonfreeze\JsonSerializer; $serializer = new JsonSerializer(); // serialize to JSON: $string = $serializer->serialize($my_object); // rebuild your object from JSON: $object = $serializer->unserialize($string);
自定义序列化
您可以为指定的类定义自己的反/序列化函数
$serializer = new JsonSerializer(); $serializer->defineSerialization( MyType::class, function (MyType $object) { return ["foo" => $object->foo, "bar" => $object->bar]; }, function (array $data) { return new MyType($data["foo"], $data["bar"]); } );
请注意,这仅适用于具体类,而不是抽象类或接口 - 序列化函数应用于精确的一个类,尽管您可以当然将这些函数注册到多个类中。
日期和时间序列化
DateTime
和 DateTimeImmutable
类已经预注册了支持自定义格式的反/序列化函数,其中日期/时间以UTC时区内的通用ISO-8601日期/时间格式存储,并附带时区ID - 例如
{
"#type": "DateTime",
"datetime": "1975-07-07T00:00:00Z",
"timezone": "America\/New_York"
}