bugadani / factory
一个简单的DIC库
v1.0
2016-05-03 08:35 UTC
Requires
- php: >=5.4
Requires (Dev)
- phpunit/phpunit: 4.*
This package is not auto-updated.
Last update: 2024-09-14 18:52:51 UTC
README
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);