botanick/serializer

用于将任何PHP结构(标量、对象、数组等)序列化为PHP基本类型(标量、标量数组、数组数组)的库。

dev-master / 1.0.x-dev 2018-02-11 08:19 UTC

This package is not auto-updated.

Last update: 2024-09-12 16:36:55 UTC


README

Build Status

此库允许您将任何复杂性的PHP结构序列化为PHP基本类型:标量、数组、标量数组、数组数组等。结果可以安全地存储在某个地方或通过使用serialize()json_encode()或其他将普通数组转换为字符串的方法传递到任何地方。

此库包含以下内置序列化器:

  • null
  • 标量(bool, int, float, string)
  • PHP resource 类型
  • 数组和 \Traversable
  • \DateTime
  • 对象(可以通过自定义配置灵活配置)

安装

此库通过composer管理。您可以通过调用以下命令安装它:

$ composer require botanick/serializer

或手动将其添加到您的composer.json

    "require": {
        "botanick/serializer": "dev-master"
    }

用法

序列化器的使用分为两个基本步骤。

首先,您应该构建您将要使用的数据序列化器。例如,如果您打算仅序列化DateTime数组,则您的代码将如下所示

use Botanick\Serializer\Serializer;

$arraySerializer = new Serializer\DataSerializer\ArraySerializer();
$dateTimeSerializer = new Serializer\DataSerializer\DateTimeSerializer();
// for detailed info on DateTimeSerializer options see an according section
$dateTimeSerializer->setDefaultOptions(array('format' => 'Y-m-d H:i:s'));

然后您需要序列化器知道它应该使用哪些数据序列化器

use Botanick\Serializer\Serializer;

$serializer = new Serializer\Serializer();
$serializer->addDataSerializer($arraySerializer, -9999);
$serializer->addDataSerializer($dateTimeSerializer, -8888);

这就完成了!现在您可以序列化您的数据了

$data = array(
    new \DateTime(),
    'yesterday' => new \DateTime('1 day ago'),
    'dates' => array(
        'some-date' => \DateTime::createFromFormat('H:i:s d.m.Y', '11:22:33 01.02.2003'),
        'another-date' => \DateTime::createFromFormat('d.m.Y', '01.02.2003')
    )
);
$serializedData = $serializer->serialize($data);
var_export($serializedData);

// you will see something like this:
// array (
//   0 => '2015-12-08 16:42:54',
//   'yesterday' => '2015-12-07 16:42:54',
//   'dates' => 
//   array (
//     'some-date' => '2003-02-01 11:22:33',
//     'another-date' => '2003-02-01 16:42:54',
//   ),
// )

文档