byjg/serializer

将任何对象序列化为数组,并格式化为JSON或XML

资助包维护!
byjg

4.9.2 2024-05-30 15:33 UTC

This package is auto-updated.

Last update: 2024-09-19 04:00:28 UTC


README

Build Status Opensource ByJG GitHub source GitHub license GitHub release

将任何对象序列化为数组,并格式化为JSON, YAML或XML

将任何对象/内容转换为数组

只需使用Serializer类,它可以处理任何类型的对象、stdClass或数组;

<?php
$result = \ByJG\Serializer\SerializerObject::instance($data)->serialize();
$result2 = \ByJG\Serializer\SerializerObject::instance($anyJsonString)->fromJson()->serialize();
$result3 = \ByJG\Serializer\SerializerObject::instance($anyYamlString)->fromYaml()->serialize();

在上面的例子中,$result$result2$result3 将是关联数组。

将数组格式化为JSON、YAML或ZML

<?php
$data = [ ... any array content ... ]

echo (new JsonFormatter())->process($data);
echo (new XmlFormatter())->process($data);
echo (new YamlFormatter())->process($data);
echo (new PlainTextFormatter())->process($data);

自定义序列化

忽略null元素:使用withDoNotSerializeNull()

SerializerObject默认包含所有属性。例如

<?php
$myclass->setName('Joao');
$myclass->setAge(null);

$serializer = new \ByJG\Serializer\SerializerObject($myclass);
$result = $serializer->serialize();
print_r($result);

// Will return:
// Array
// (
//     [name] => Joao
//     [age] => 
// )

但您可以设置忽略null元素

<?php
$result = \ByJG\Serializer\SerializerObject::instance($myclass)
            ->withDoNotSerializeNull()
            ->serialize();
print_r($result);

// And the result will be:
// Array
// (
//     [name] => Joao
// )

不解析某些类:使用withDoNotParse([object])

有时我们想要序列化对象,但忽略某些类类型。

设置此选项后,setDoNotParse中定义的所有类都将被忽略且不会解析

<?php
$result = \ByJG\Serializer\SerializerObject::instance($myclass)
            ->withDoNotParse([
                MyClass::class
            ])
            ->serialize();

创建一个可绑定的对象

向对象添加方法bind,允许从另一个对象设置内容

<?php
// Create the class
class MyClass extends BindableObject
{}

// Bind any data into the properties of myclass
$myclass->bindFrom($data);

// You can convert to array all properties
$myclass->bindTo($otherobject);

从任何对象复制内容到另一个对象

// Set all properties from $source that matches with the property in $target
BinderObject::bind($source, $target);

// Convert all properties of any object into array
SerializerObject::serialize($source);

从具有驼峰式属性的对象复制内容到具有snake_case属性的对象

class Source
{
    public $idModel;
    public $clientName;
    public $age;
}

class Target
{
    public $id_model;
    public $client_name;
    public $age;
}

$source = new Source();
$source->idModel = 1;
$source->clientName = 'John';
$source->age = 30;

BinderObject::bind($source, $target, new CamelToSnakeCase());

从具有snake_case属性的对象复制内容到具有驼峰式属性的对象

class Source
{
    public $id_model;
    public $client_name;
    public $age;
}

class Target
{
    public $idModel;
    public $clientName;
    public $age;
}

$source = new Source();
$source->id_model = 1;
$source->client_name = 'John';
$source->age = 30;

BinderObject::bind($source, $target, new SnakeToCamelCase());

安装

composer require "byjg/serialize"

测试

vendor/bin/phpunit

依赖项

开源ByJG