詹姆斯·哈尔索尔/object-hydrator

使用反射进行构造函数或设置器注入的简单对象注水器。

1.2.0 2016-08-06 10:41 UTC

This package is not auto-updated.

Last update: 2024-09-14 16:34:37 UTC


README

Build Status

一个使用反射进行构造函数或设置器注入的简单对象注水器。

注水器接收一个原始数据数组,并用这些数据给指定类的一个或多个对象注水。

用法

提供了两种主要的注水器类型,分别是 ObjectConstructorFromArrayHydratorObjectSetterFromArrayHydrator,允许您通过构造函数或设置器进行注水。

构造函数注水

如果您的对象使用构造函数注入,则可以使用 ObjectConstructorFromArrayHydrator 实例注水您的对象。

示例

$data = ['name' => 'Frank Turner', 'job_title' => 'Musician'];
$hyrdator = new ObjectConstructorFromArrayHydrator();
$person = $hydrator->hydrate('Person\Employee', $data);

Person\Employee 类看起来如下

<?php

namespace Person;

class Employee
{
    private $name;
    private $jobTitle;
    
    public function __construct($name, $jobTitle)
    {
        $this->name = $name;
        $this->jobTitle = $jobTitle;
    }
}

设置器注水

如果您的对象使用设置器注入,则可以使用 ObjectSetterFromArrayHydrator 实例注水您的对象。

示例

$data = ['name' => 'Frank Turner', 'job_title' => 'Musician'];
$hyrdator = new ObjectSetterFromArrayHydrator();
$person = $hydrator->hydrate('Person\Employee', $data);

Person\Employee 类看起来如下

<?php

namespace Person;

class Employee
{
    private $name;
    private $jobTitle;
    
    public function setName($name)
    {
        $this->name = $name;
    }
    
    public function setJobTitle($jobTitle)
    {
        $this->jobTitle = $jobTitle;
    }
}

使用设置器注水器,您也可以将现有对象传递给注水器,而不是类名

$data = ['name' => 'Frank Turner', 'job_title' => 'Musician'];
$hydrator = new ObjectSetterFromArrayHydrator();
$person = new Person();
$hydrator->hydrate($person, $data);

注水集合

有时您可能有一个数组的数组,每个数组代表一个模型的原始数据。您可以在一个方法调用中注水这些数据,例如

$data = [['name' => 'Frank Turner', 'job_title' => 'Musician'], ['name' => 'Steve Jobs', 'job_title' => 'CEO']];
$hydrator = new ObjectSetterFromArrayHydrator();
$hydratedObjects = $hydrator->hydrateCollection('Person\Employee', $data);

注意:您不能将对象传递给 hydrateCollection 方法,它必须是可调用的或包含完全限定类名 (FQCN) 的字符串。

可调用类名

在注水对象时,您传递给 hydratehydrateCollection 方法的第一个参数是要创建实例的完全限定类名 (FQCN)。您可以使用可调用来代替 FQCN。可调用将接收您作为第二个参数传递的原始数据 ($data)。

示例

$data = ['name' => 'Frank Turner', 'job_title' => 'Musician'];
$hydrator = new ObjectConstructorFromArrayHydrator();
$person = $hydrator->hydrate(function ($rawData) {
    if ($rawData['job_title' === 'Musician']) {
        return 'Person\Musician';
    }

    return 'Person\Employee';
}, $data);

路线图

  • 添加工厂以改善注水器的实例化可读性
  • 探索添加支持嵌套对象注水的选项
  • 允许将对象实例传递给注水器而不是类名