Laravel 依賴注入原理

衆所周知 Laravel 的文檔對於依賴注入只寫瞭如何使用,相信大多數人對於他的實現原理並不太清楚。雖然使用過程當中並不須要關心她的原理,可是瞭解原理讓你使用起來更自信。這個帖子就經過一個小 demo 來簡述實現原理,demo 以下,該 demo 可直接運行:php

<?php

namespace Database;
use ReflectionMethod;

class Database
{

    protected $adapter;

    public function __construct ()
    {}

    public function test (MysqlAdapter $adapter)
    {
        $adapter->test();
    }
}

class MysqlAdapter
{

    public function test ()
    {
        echo "i am MysqlAdapter test";
    }
}

class app
{

    public static function run ($instance, $method)
    {
        if (! method_exists($instance, $method))

            return null;

        $reflector = new ReflectionMethod($instance, $method);

        $parameters = [
                    1
            ];
        foreach ($reflector->getParameters() as $key => $parameter)
        {

            $class = $parameter->getClass();

            if ($class)
            {
                array_splice($parameters, $key, 0, [
                        new $class->name()
                ]);
            }
        }
        call_user_func_array([
                $instance,
                $method
        ], $parameters);
    }
}

app::run(new Database(), 'test');

原理主要運用了PHP反射api的 ReflectionMethod 類,在PHP運行狀態中,擴展分析PHP程序。具體使用可查看手冊。sql

相關文章
相關標籤/搜索