deefour / producer
简单的基于规则的类解析
1.1.1
2016-03-16 15:27 UTC
Requires
- php: >=5.5.0
- illuminate/support: ^5.0
Requires (Dev)
- illuminate/container: ^5.0
- illuminate/support: ^5.0
- phpspec/phpspec: ^2.4.0
This package is auto-updated.
Last update: 2024-09-16 08:20:16 UTC
README
一个小型类工厂。
入门
运行以下命令将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许可证下发布。