lc5/from-array

使用类型检查从数组创建对象

1.0.0 2022-03-04 19:22 UTC

This package is not auto-updated.

Last update: 2024-09-29 08:51:59 UTC


README

Build Status Latest Stable Version Total Downloads PHP Version Require License PHPStan Enabled

使用类型检查从数组创建对象。

安装

$ composer require lc5/from-array

用法

FromArrayTrait添加到您希望使用数组值实例化的类中。它提供了fromArray方法,该方法将验证数据,并在数据有效时创建对象。否则,将抛出PHP TypeErrorLc5\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类型通过本机类型属性受支持