我有一个数组,$dependencies
,其中包含所有依赖对象。
在最后一行,我返回了实例化的对象。
我如何注入所有的依赖对象,我有在数组?
class IoC
{
public static function make($object)
{
$class = new ReflectionClass($object);
$params = $class->getConstructor()->getParameters();
foreach ($params as $param) {
$dependency = $param->getClass()->name;
$dependencies[] = new $this->make($dependency);
}
$name = $class->getName();
return new $name(); //todo
}
}
尝试对每个依赖项进行递归调用。每个依赖项本身都可以有需要"构建"的依赖项:
foreach ($params as $param) {
$dependency = $param->getClass()->name;
$dependencies[] = $this->make('dependency');
}
就传递给对象的构造函数而言,这里不要依赖new
。相反,请使用如下答案所述的反射:
$reflection = new ReflectionClass( 'yourClassName' );
$instance = $reflection->newInstanceArgs( $dependencies );
在你的例子中,这将是:
return $class->newInstanceArgs($dependencies);