我有一个数组$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
}
}
答案 0 :(得分:0)
尝试为每个依赖项进行递归调用。每个依赖项本身都具有需要构建的依赖项':
foreach ($params as $param) {
$dependency = $param->getClass()->name;
$dependencies[] = $this->make('dependency');
}
只要将它们传递给对象的构造函数,就不要在这里依赖new
。相反,请使用this answer中详述的反射:
$reflection = new ReflectionClass( 'yourClassName' );
$instance = $reflection->newInstanceArgs( $dependencies );
在你的情况下,这将是:
return $class->newInstanceArgs($dependencies);