lukasz93p/object-serializer
Composer 安装命令:
composer require lukasz93p/object-serializer
包简介
Package which allows easy serialization and deserialization of php objects using JSON format, setters or public properties are not needed.
README 文档
README
Current implementation uses jms/serializer: https://packagist.org/packages/jms/serializer
So jms/serializer's annotations are a must for this package - here You can read about them: http://jmsyst.com/libs/serializer/master/reference/annotations
Why to use this package?
- It gives You very easy to use tool to convert php objects into JSON and inversely.
- Public properties, constructor or setters are not required so converted objects can utilize full encapsulation.
- Native php serialization is not used so serialized objects are not language dependent.
- Supports very rich spectrum of properties types (including class instances).
Hot to use?
1 Class which You want to serialize have to implement
<?php namespace Lukasz93P\objectSerializer; interface SerializableObject { /** * Unique identifier(per class, not per instance) used to identify serialized object class * Event if You change class name/namespace after object serialization it still can be deserialized properly **/ public function classIdentificationKey(): string; }
2 Add annotations to class implementing SerializableObjects like it's described in jms/serializer documentation: http://jmsyst.com/libs/serializer/master/reference/annotations.
3 Serialize class instance:
$serializer = ObjectSerializerFactory::create([]); $objectSerializedToJson = $serializer->serialize($serializableObjectInstance);
4 Deserialize class instance:
$serializer = ObjectSerializerFactory::create([TestSerializableClass::IDENTIFICATION_KEY => TestSerializableClass::class]); $testSerializableClassInstace = $serializer->deserialize($serializedTestSerializableClassInstance);
5 Instantiation of ObjectSerializer:
You should do this through ObjectSerializerFactory::create method. That method receives associative array
which is used as mapping between result of SerializableObject::classIdentificationKey and fully qualified class name for each
class implementing SerializableObject.
Example
<?php namespace tests; use JMS\Serializer\Annotation as Serializer; use Lukasz93P\objectSerializer\ObjectSerializerFactory; use Lukasz93P\objectSerializer\SerializableObject; use PHPUnit\Framework\TestCase; class TestSerializableClass implements SerializableObject { public const IDENTIFICATION_KEY = 'test'; /** * @var string * @Serializer\SerializedName("testStringField") * @Serializer\Type("string") */ private $testStringField; /** * @var int * @Serializer\SerializedName("testNumericField") * @Serializer\Type("int") */ private $testNumericField; public function __construct(string $testStringField, int $testNumericField) { $this->testStringField = $testStringField; $this->testNumericField = $testNumericField; } public function classIdentificationKey(): string { return self::IDENTIFICATION_KEY; } public function getTestStringField(): string { return $this->testStringField; } public function getTestNumericField(): int { return $this->testNumericField; } } class ObjectSerializerTest extends TestCase { private $objectSerializer; protected function setUp(): void { parent::setUp(); $this->objectSerializer = ObjectSerializerFactory::create([TestSerializableClass::IDENTIFICATION_KEY => TestSerializableClass::class]); } public function testShouldSerializeAndDeserializeSerializableObjectInstance(): void { $serializableObjectInstance = new TestSerializableClass('test', 1); $serializedObject = $this->objectSerializer->serialize($serializableObjectInstance); $deserializedObject = $this->objectSerializer->deserialize($serializedObject); $this->assertInstanceOf(TestSerializableClass::class, $deserializedObject); } public function testShouldSerializeAndDeserializeSerializableObjectInstanceWithClassFieldsRegardlessOfThoseFieldsVisibilityAndWithoutAvailableSetters( ): void { $testStringValue = 'testStringValue'; $testNumericValue = 4235; $serializableObjectInstance = new TestSerializableClass($testStringValue, $testNumericValue); $serializedObject = $this->objectSerializer->serialize($serializableObjectInstance); /** @var TestSerializableClass $deserializedObject */ $deserializedObject = $this->objectSerializer->deserialize($serializedObject); $this->assertEquals($testStringValue, $deserializedObject->getTestStringField()); $this->assertEquals($testNumericValue, $deserializedObject->getTestNumericField()); } }
lukasz93p/object-serializer 适用场景与选型建议
lukasz93p/object-serializer 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 66 次下载、GitHub Stars 达 0, 最近一次更新时间为 2019 年 11 月 11 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「serialization」 「deserialization」 「serializer」 「deserializer」 「object serialization」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 lukasz93p/object-serializer 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 lukasz93p/object-serializer 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 lukasz93p/object-serializer 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Fork of jms/serializer 1.14.1 with support for modern PHP versions.
Bridge between JMS Serializer Bundle and Superdesk Web Publisher.
A library to serialize and deserialize Avro records making use of the confluent schema registry
De/normalize business objects without tightly coupling them to your normalization format
Simple minimal but useful set of utils (properties, strings, datetimes, etc.)
Runn Me! Serialization Library
统计信息
- 总下载量: 66
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 6
- 依赖项目数: 2
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2019-11-11