northern/serializer

将注解对象序列化为普通PHP数组。

1.0.1 2014-07-26 00:35 UTC

This package is not auto-updated.

Last update: 2024-09-24 03:28:34 UTC


README

Northern\Serializer 是一个小的PHP库,允许您注解您的POPO(Plain Old PHP Objects),并将它们序列化为普通PHP数组。

运行测试

vendor/bin/phpunit

生成代码覆盖率报告

vendor/bin/phpunit --coverage-html ./reports

Packagist 上查找 Northern\Serializer

安装

通过 Composer 安装。

"require": {
  "northern/serializer": "1.*"
}

如何使用

要使用 Northern\Serializer,您需要导入它

use Northern\Serializer\Serializer;

现在,您可以在任何PHP对象上实例化和运行序列化器

$serializer = new Serializer();

$array = $serializer->toArray( $someObject );

然而,如果没有对 $someObject 的类进行注解,则不会进行序列化。让我们注解 $someObject 实例的类

use Northern\Serializer\Annotation as Serialize;

class SomeClass {

  /** @Serialize\Int */
  protected $myProperty = 123;

}

我们已经注解了我们的类,并指明 $myProperty 属性必须序列化为整数。现在,当我们序列化 $someObject(假设它是 SomeClass 的实例)时,$array 变量将包含序列化数据

Array(
  [myProperty] => 123
)

非常简单。

使用 Northern\Serializer,您还可以序列化方法。通常,序列化的方法是某种getter。让我们看看一个例子

use Northern\Serializer\Annotation as Serialize;

class SomeClass {

  /** @Serialize\Int(name="myValue") */
  public function getMyValue()
  {
    return 123;
  }

}

如上所示,只需给方法添加正确的注解,方法的输出就会以注解中 name 参数指定的键进行序列化,例如,在我们的例子中是 myValue

Array(
  [myValue] => 123
)

如果没有在注解上指定 name 属性,则将使用方法名称作为序列化键,例如

class SomeClass {

  /** @Serialize\Bool */
  public function isValid()
  {
    return true;
  }

}

这将产生

Array(
  [isValid] => 1
)

序列化属性和方法当然非常方便,但是关于嵌套对象怎么办?也可以做到

class BarClass {
	
	/** @Serialize\Int */
	protected $barValue = 123;

}

class FooClass {

  /** @Serialize\Object */
  protected $bar;

  public function __construct()
  {
    $this->bar = new BarClass();
  }

}

注意 Serialize\Object 注解?要注意递归引用!

参考

以下是可用的序列化类型

类型 | 描述

  • | - Serialize\Bool | 序列化布尔值。 Serialize\Int | 序列化整数值。 Serialize\Object | 序列化对象。表示递归。 Serialize\Collection | 序列化可迭代的对象,例如对象数组。