onemoreangle / php-marshaller
一个小型库,具有少量必需依赖项,用于使用可选属性或基于注解的配置序列化和反序列化PHP结构
dev-main
2023-11-30 00:29 UTC
Requires
- php: >=7.4
Requires (Dev)
- ext-json: *
- ext-simplexml: *
- doctrine/annotations: ^2.0
- phpstan/extension-installer: ^1.3
- phpstan/phpstan: ^1.10
- phpstan/phpstan-phpunit: ^1.3
- phpunit/phpunit: ^9.6
- symfony/yaml: ^5.4
Suggests
- ext-json: To use the JSON serialization format
- ext-simplexml: To use the XML serialization format
- doctrine/annotations: To use annotation-based configuration, especially useful PHP < 8.0, otherwise defaults to attribute-based configuration
- symfony/yaml: To use the YAML serialization format
This package is auto-updated.
Last update: 2024-09-30 01:41:20 UTC
README
警告
此项目处于非常早期的开发阶段,应被视为实验性的。
这是一个小型库,具有少量必需依赖项,用于使用基于注解的可选配置序列化和反序列化PHP数据结构。
当前功能
- JSON和YAML序列化和反序列化
- 可选属性或基于注解的序列化/反序列化定制
- 递归推断属性类型和可选基于注解的目标类型
- 循环引用检测
- 支持PHP 8属性和Doctrine注解(PHP 7.4+)
计划功能
- 支持其他序列化格式,尤其是XML
- 更强大的对象实例化能力
- 用户定义的定制(反)序列化逻辑
- 性能优化
- 使用getter和setter进行数据提取和注入(默认情况下)
安装
对于一般使用,请使用以下命令通过composer安装库
composer require onemoreangle/php-marshaller --no-dev
开发
使用composer和开发依赖项安装库
composer require onemoreangle/php-marshaller
使用方法
使用默认设置进行简单使用
要序列化和反序列化,您可以使用任何可用的序列化提供程序,这些提供程序包含默认的读取属性/注解。例如,要使用具有默认设置的Json序列化提供程序
use OneMoreAngle\Marshaller\Api\Json; $data = new CustomClass(); $serialized = Json::marshal($data); $deserialized = Json::unmarshal($json, CustomClass::class);
将来将添加其他格式的序列化提供程序。
定制序列化
您可以通过创建一个SerializerBuilder并将其与选项一起提供来自定义序列化过程。通常,您会希望使用序列化提供程序的自定义设置,然后进行定制,如下所示
use OneMoreAngle\Marshaller\Api\Json; ... $serializer = Json::getDefaultSerializerBuilder()->withMetaExtractor(...)->build(); $data = $serializer->marshal($object);
属性
您可以使用属性来自定义序列化/反序列化过程。例如,您可以使用Name属性将属性映射到不同的序列化名称,使用Aliases将替代序列化名称映射到属性,使用Omit属性从序列化中省略属性,使用OmitEmpty属性在属性为空时省略属性,并使用TargetType属性指定要反序列化的属性类型。让我们看看一个例子
use OneMoreAngle\Marshaller\Attribute\Aliases; use OneMoreAngle\Marshaller\Attribute\Name; use OneMoreAngle\Marshaller\Attribute\Omit; use OneMoreAngle\Marshaller\Attribute\OmitEmpty; class CustomClass { #[Name('custom_name')] #[Aliases(['alias1', 'alias2'])] #[OmitEmpty] public string $property; #[Omit] public string $property2; }
当您按如下方式序列化上述类的实例时
use OneMoreAngle\Marshaller\Api\Json; $data = new CustomClass(); $data->property = 'test'; $data->property2 => 'test2'; $serialized = Json::marshal($data); echo $serialized;
输出将是
{"custom_name":"test"}
当我们使用JSON中的别名属性进行反序列化时
use OneMoreAngle\Marshaller\Api\Json; $json = '{"alias2":"hello"}'; $deserialized = Json::unmarshal($json, CustomClass::class); print_r($deserialized);
我们得到以下输出
CustomClass Object
(
[property] => hello
)
要求
- PHP >= 7.4(要使用属性,PHP 8.0或更高版本是必需的;否则,您可以使用doctrine/annotations并使用注解代替)
贡献
欢迎贡献!请随时提交pull request
许可
php-marshaller库是在MIT许可证下发布的。有关更多详细信息,请参阅LICENSE文件。