deefour/producer

简单的基于规则的类解析

1.1.1 2016-03-16 15:27 UTC

This package is auto-updated.

Last update: 2024-09-16 08:20:16 UTC


README

Build Status Packagist Version Code Climate License

一个小型类工厂。

入门

运行以下命令将Producer添加到项目的composer.json中。有关特定版本,请参阅Packagist

composer require deefour/producer

>=PHP5.5.0是必需的。

概述

Producer是一个类,用于解析相关Producible类的FQCN。工厂接受一个Producer和“类型”,并根据返回的解析FQCN实例化一个具体的Producible类。

生产者和可生产者

生产工厂只接受实现了Deefour\Producer\Contracts\Producer的类。如果解析的类没有实现Deefour\Producer\Contracts\Producible,则将抛出异常。

给定以下类

use Deefour\Producer\Contracts\Producer;
use Deefour\Producer\Contracts\Producible;

class Podcast implements Producer
{
    // ...
}

class PodcastPolicy implements Producible
{
    // ...
}

class PodcastScope implements Producible
{
    // ...
}

当给定播客和“类型”时,生产工厂可以生产上述每个可生产实例。

use Deefour\Producer\Factory;

$podcast = new Podcast();
$factory = new Factory();

$factory->resolve($podcast, 'policy'); //=> 'PodcastPolicy`
$factory->resolve($podcast, 'scope'); //=> 'PodcastScope`

$factory->make($podcast, 'policy'); //=> instance of PodcastPolicy

解析可生产者

生产工厂上的默认可生产解析器看起来像这样

get_class($producer) . ucfirst($type)

这可以通过在传递给工厂的生产者上实现一个resolve()方法来自定义。

use Deefour\Producer\Contracts\Producer;

class Podcast implements Producer
{
    public function resolve($type)
    {
        // return FQCN string here
    }
}

deefour/producer包还包含一个更具体的解析器,位于Deefour\Producer\ResolvesProducibles

namespace App;

use Deefour\Producer\ResolvesProducibles;
use Deefour\Producer\Contracts\Producer;

class Podcast implements Producer
{
    use ResolvesProducibles;
}

这将复数化传入的“类型”,并将其附加到执行类解析的生产者的命名空间。

use App\Podcast;
use Deefour\Producer\Factory;

$podcast = new Podcast();
$factory = new Factory();

$factory->resolve($podcast, 'policy'); //=> 'App\Policies\PodcastPolicy`

制作可生产者

生产工厂上的默认可生产实例化器看起来像这样

new $producible($producer);

这可以通过在传递给工厂的生产者上实现一个make()方法来自定义。

use Deefour\Producer\Contracts\Producer;

class Podcast implements Producer
{
    public function make($producible)
    {
        // instantiate the passed $producible (an FQCN)
    }
}

注意:Deefour\Producer\ResolvesProducibles特质不实现make()方法。

贡献

变更日志

1.0.0 - 2015年10月7日

  • 发布1.0.0。

0.1.1 - 2015年8月8日

  • 添加了ProductionFactory接口,以允许在其他包中进行更宽松的类型提示。
  • 清理文档块。

0.1.0 - 2015年8月4日

  • 首次发布。

许可证

版权所有 (c) 2015 Jason Daly (deefour)。在MIT许可证下发布。