lc5 / from-array
使用类型检查从数组创建对象
1.0.0
2022-03-04 19:22 UTC
Requires
- php: >=7.4
Requires (Dev)
- phpstan/phpstan: ^1.1
- phpunit/phpunit: ^9.5
- symplify/easy-coding-standard: ^9.4
This package is not auto-updated.
Last update: 2024-09-29 08:51:59 UTC
README
使用类型检查从数组创建对象。
安装
$ composer require lc5/from-array
用法
将FromArrayTrait
添加到您希望使用数组值实例化的类中。它提供了fromArray
方法,该方法将验证数据,并在数据有效时创建对象。否则,将抛出PHP TypeError
或Lc5\FromArray\Exception\InvalidArgumentException
。
验证包括以下步骤
- 检查是否所有必需的属性都存在
- 检查是否存在冗余属性
- 检查所有属性的类型是否正确,根据doc块。请参阅支持的注释
上述行为可以进行配置。请参阅选项
基本示例
use Lc5\FromArray\FromArrayTrait; class ExampleClass { use FromArrayTrait; private bool $bool; private int $int; private float $float; private string $string; private array $array; private object $object; } $properties = [ 'bool' => true, 'int' => 2, 'float' => 3.5, 'string' => 'example string', 'array' => ['example array'], 'object' => new stdClass() ]; $exampleObject = ExampleClass::fromArray($properties);
高级示例
use Lc5\FromArray\FromArrayTrait; class ExampleClass { use FromArrayTrait; /** @var callable */ private $callable; /** @var mixed[] */ private iterable $iterable; /** @var stdClass[] */ private array $typedArray; /** @var stdClass[] */ private iterable $typedIterable; /** @var mixed */ private $mixed; /** @var int|float */ public $intOrFloat; } $properties = [ 'callable' => function (): void {}, 'iterable' => new ArrayObject(), 'typedArray' => [new stdClass(), new stdClass()], 'typedIterable' => new ArrayObject([new stdClass(), new stdClass()]), 'mixed' => 'mixed', 'intOrFloat' => 1.5 ]; $exampleObject = ExampleClass::fromArray($properties);
文档
选项
以下选项可用
DEFAULT
- 检查缺失和冗余属性并检查类型VALIDATE_MISSING
- 检查缺失属性VALIDATE_REDUNDANT
- 检查冗余属性VALIDATE_TYPES
- 检查属性类型
可以使用位运算符组合选项。为了禁用冗余属性的验证,以便能够传递具有更多属性的数组,您可以使用以下代码
ExampleClass::fromArray($properties, Options::DEFAULT & ~Options::VALIDATE_REDUNDANT);
更多信息:https://php.ac.cn/manual/en/language.operators.bitwise.php
支持的注释
以下doc块注释受支持
callable
- 标准PHP可调用类型mixed
- 表示PHP混合类型,基本上意味着任何类型T[]
- 表示给定类型的类型化可迭代项,例如int[]
、stdClass[]
等。- 联合类型 - 例如
int|float
- 表示类型的联合
标准PHP类型通过本机类型属性受支持