estvoyage / serialization
面向东方的序列化接口
dev-master
2015-09-22 07:31 UTC
Requires
- php: >=5.6.0
- estvoyage/csv: @dev
- estvoyage/data: @dev
- estvoyage/object: @dev
- estvoyage/value: @dev
Requires (Dev)
- mageekguy/atoum: @dev
This package is auto-updated.
Last update: 2024-08-28 08:43:33 UTC
README
面向东方的序列化接口
serialization 是一个 PHP 库,允许你在任何类中实现一个 序列化 协议。
传统上,如果你想要将实例序列化为 JSON,你应该在其类中实现 jsonSerializable
接口。
此外,如果有多个类应该支持 JSON 序列化,你应该在每个类中实现此接口。
如果你想使用另一种序列化格式,例如 XML,你应该在每个类中实现一个新的方法。使用 serialization,你可以在每个类中定义一个独特的方法来处理任何序列化格式。
安装
使用 serialization 的最小 PHP 版本是 5.6。
推荐通过 Composer 安装 Negotiation,只需在你的 composer.json
中添加以下内容并执行 php composer.phar install
{ "require": { "estvoyage/serialization": "@dev", "estvoyage/object": "@dev", "estvoyage/value": "@dev" } }
使用方法
简而言之
<?php require __DIR__ . '/../vendor/autoload.php'; use estvoyage\csv, estvoyage\data, estvoyage\object, estvoyage\serialization ; class console implements data\consumer { function dataProviderIs(data\provider $provider) { $provider->dataConsumerIs($this); return $this; } function newData(data\data $data) { echo 'Serialization: <' . $data . '>' . PHP_EOL; return $this; } function noMoreData() { return $this; } function dataConsumerControllerIs(data\consumer\controller $controller) { return $this; } } class foo implements object\storable { private $stringProperty, $integerProperty, $floatProperty, $booleanProperty, $storableProperty, $nullProperty ; function __construct($string, $integer, $float, $boolean, object\storable $storable, $null = null) { $this->stringProperty = $string; $this->integerProperty = $integer; $this->floatProperty = $float; $this->booleanProperty = $boolean; $this->storableProperty = $storable; $this->nullProperty = $null; } function objectStorerIs(object\storer $storer) { $storer ->stringObjectPropertyHasValue(new object\property('stringProperty'), new object\property\string($this->stringProperty)) ->integerObjectPropertyHasValue(new object\property('integerProperty'), new object\property\integer($this->integerProperty)) ->floatObjectPropertyHasValue(new object\property('floatProperty'), new object\property\float($this->floatProperty)) ->booleanObjectPropertyHasValue(new object\property('booleanProperty'), new object\property\boolean($this->booleanProperty)) ->storableObjectPropertyHasValue(new object\property('storableProperty'), $this->storableProperty) ->nullObjectProperty(new object\property('nullProperty')) ; } } class bar implements object\storable { private $value ; function __construct($value) { $this->value = $value; } function objectStorerIs(object\storer $storer) { $storer ->stringObjectPropertyHasValue(new object\property('value'), new object\property\string($this->value)) ; } } $console = new console; $foo = new foo(uniqid(), 666, 666.999, true, new bar(uniqid())); (new serialization\serializer\json) ->newStorable($foo) ->dataConsumerIs($console) ; (new serialization\serializer\csv(new csv\generator\rfc4180)) ->newStorable($foo) ->dataConsumerIs($console) ; /* Output will be something like: Serialization: <{"stringProperty":"5511d589ef90a","integerProperty":666,"floatProperty":666.999,"booleanProperty":true,"storableProperty":{"value":"5511d589ef932"},"nullProperty":null}> Serialization: <stringProperty,integerProperty,floatProperty,booleanProperty,storableProperty.value,nullProperty 5511d589ef90a,666,666.999,1,5511d589ef932, > */
在捆绑的 examples
目录中提供了一个工作脚本,只需执行 php examples/nutshell.php
来运行它。
单元测试
使用 Composer 设置测试套件
$ composer install --dev
使用 atoum 运行它
$ vendor/bin/atoum
贡献
有关详细信息,请参阅捆绑的 CONTRIBUTING
文件。
许可证
serialization 在 FreeBSD 许可证下发布,有关详细信息,请参阅捆绑的 COPYING
文件。