byjg / serializer
将任何对象序列化为数组,并格式化为JSON或XML
4.9.2
2024-05-30 15:33 UTC
Requires
- php: >=7.4
- ext-json: *
- symfony/yaml: > 4
Requires (Dev)
- phpunit/phpunit: 5.7.*|7.4.*|^9.5
Suggests
- ext-curl: *
README
将任何对象序列化为数组,并格式化为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