mindplay/jsonfreeze

JSON序列化库

1.3.1 2016-07-20 19:07 UTC

This package is auto-updated.

Last update: 2024-08-25 19:35:53 UTC


README

将PHP对象图序列化到JSON字符串表示,或将JSON字符串表示反序列化为PHP对象图。

Build Status

概述

此库可以将完整的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"]);
    }
);

请注意,这仅适用于具体类,而不是抽象类或接口 - 序列化函数应用于精确的一个类,尽管您可以当然将这些函数注册到多个类中。

日期和时间序列化

DateTimeDateTimeImmutable 类已经预注册了支持自定义格式的反/序列化函数,其中日期/时间以UTC时区内的通用ISO-8601日期/时间格式存储,并附带时区ID - 例如

{
    "#type": "DateTime",
    "datetime": "1975-07-07T00:00:00Z",
    "timezone": "America\/New_York"
}