依赖注入的优势
依赖注入的灵活性在于:你 new
这个类的时候可以传入变量, 这个变量的值就很灵活了。你可以随便传入什么变量。如果 hint
是一个 Interface
的话 就更灵活了
<?php
class IndexController
{
public function __construct(User $user, Order $order)
{
echo 'I am IndexController' . PHP_EOL;
$user->foo();
$order->foo();
}
public function testAction(Order $order)
{
$order->foo();
}
}
class User
{
public function foo()
{
echo 'i am user foo' . PHP_EOL;
}
}
class Order
{
public function foo()
{
echo 'i am order foo' . PHP_EOL;
}
}
function make($className)
{
$reflector = new ReflectionClass($className);
$dependencies = $reflector->getConstructor()->getParameters();
$results = [];
foreach ($dependencies as $dependency) {
$class = $dependency->getClass();
$results[] = new $class->name;
}
//Creates a new class instance from given arguments
return $reflector->newInstanceArgs($results);
}
$instance = make('IndexController');
$action = 'testAction';
$reflector = new \ReflectionMethod($instance, $action);
$parameters = [];
foreach ($reflector->getParameters() as $key => $parameter) {
$class = $parameter->getClass();
$parameters[] = new $class->name;
}
call_user_func_array([$instance, $action], $parameters);