bugadani/factory

一个简单的DIC库

v1.0 2016-05-03 08:35 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:52:51 UTC


README

Build Status

Factory

Factory是一个简单的PHP依赖注入容器,适用于PHP 7及更高版本。

用法

要实例化一个对象,只需将它的名称传递给Factory::get()方法。实例化的对象将被存储,以后可以检索。

$instance = $factory->get(FooClass::class);

类依赖关系将自动解决。

class FooClass {
    public function __construct(BarClass $b){
        //$b will be injected
    }
}
$instance = $factory->get(FooClass::class);

可以通过传递数组到Factory::setParameters()或者作为Factory::get()的第二个参数来定义其他构造函数参数。这些参数可以是位置参数或命名参数。命名参数优先于位置参数,传递给Factory::get()的参数将覆盖通过Factory::setParameters()设置的参数。

class FooClass {
    public function __construct($a, $b){
        //$a == 'foobar'
        //$b == 'baz'
    }
}
$factory->setParameters(FooClass::class, ['b' => 'baz', 0 => 'foobar']);
$instance = $factory->get(FooClass::class);

可以使用$factory->setParameter(FooClass::class, $parameterNameOrPosition, $parameterValue)单独设置参数。

类名也可以进行别名设置,这可以用于注入接口实现或扩展类。别名类使用实际类的参数。

class FooClass {
    public function __construct(SomeInterface $a){
        //$a instanceof SomeInterfaceImpl
    }
}
$factory->addAlias(SomeInterfaceImpl::class, SomeInterface::class);
$instance = $factory->get(FooClass::class);

可以为对象实例化时调用的回调函数设置回调,以执行一些额外的初始化操作。将Factory实例和对象传递给回调。如果创建了新对象,此回调才会被调用。

$factory->addCallback(SomeClass::class, function(Factory $factory, SomeClass $instance){});
$instance = $factory->get(SomeClass::class);