roke22 / array-to-object-factory
将数组自动映射到对象构造函数参数的对象
dev-main
2022-11-06 23:21 UTC
Requires
- php: ^7.4||^8.0
Requires (Dev)
- phpunit/phpunit: ^9.0
This package is auto-updated.
Last update: 2024-09-29 14:08:50 UTC
README
什么是数组到对象工厂?
这是一个实用工具,可以帮助您创建一个类及其所有依赖项,而无需映射值。
所有对象都使用构造方法创建,因此数据必须满足您拥有的验证。
唯一的要求是数组的值的索引必须组织在同一层级的层次结构中。
它已声明严格类型,因此值 1 与 '1' 不同。PHP 不会尝试将整数 1 转换为字符串 '1'。在这种情况下,您将获得 TypeError 异常。
示例
class SimpleClass { protected string $name; protected bool $isActive; public function __construct(string $name, bool $isActive) { $this->name = $name; $this->isActive = $isActive; } }
您可以这样做来创建此类
$data = [ 'name' => 'John Doe', 'is_active' => false ]; $object = ArrayToObject::make($data, SimpleClass::class);
数组索引被转换为蛇形、骆驼和studly格式,以在数组数据和对象构造函数参数之间找到匹配。
您可以通过传递第三个参数来限制转换,如下所示
$object = ArrayToObject::make($data, SimpleClass::class, ArrayToObject::SNAKE);
或者甚至不转换任何数据
$object = ArrayToObject::make($data, SimpleClass::class, ArrayToObject::NONE);
可能的值
ArrayToObject::ALL // By default ArrayToObject::SNAKE ArrayToObject::CAMEL ArrayToObject::STUDLY ArrayToObject::NONE
获取原始 $data 数组作为示例
$data = [ 'name' => 'John Doe', 'is_active' => false ];
数组到对象工厂转换为以下数组
$data = [ 'name' => 'John Doe', 'is_active' => false, 'isActive' => false, 'IsActive' => false, ];
如果原始数组中存在一些索引转换,则数据将被覆盖,并且对象可能使用错误的数据构建,要解决这个问题,您可以强制转换类型为 NONE 或仅需要的注释
示例复杂类
class Classroom { protected int $number; protected Course $course; public function __construct(int $number, Course $course) { $this->number = $number; $this->course = $course; } } class Course { protected string $name; public function __construct(string $name) { $this->name = $name; } } $data = [ 'number' => 1, 'course' => [ 'Maths' ] ]; $result = ArrayToObject::make($data, Classroom::class);
更多示例
您可以查看测试文件夹以查看一些集合和更复杂类的示例。
请随时报告任何问题并进行任何拉取请求以改进该包。
谢谢。