zoukankan      html  css  js  c++  java
  • Laravel 依赖注入原理

    众所周知 Laravel 的文档对于依赖注入只写了如何使用,相信大多数人对于他的实现原理并不太清楚。虽然使用过程中并不需要关心她的原理,但是了解原理让你使用起来更自信。这个帖子就通过一个小 demo 来简述实现原理,demo 如下,该 demo 可直接运行:

    <?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程序。具体使用可查看手册。

  • 相关阅读:
    第七周总结
    第六周编程总结
    第五周编程总结
    选择加冒泡排序法与找鞍马之总结与感受
    上三角矩阵与数组中元素之和最大
    文件的读写
    打印沙漏
    第八周作业
    第七周作业
    第六周作业
  • 原文地址:https://www.cnblogs.com/xiashuo-he/p/4890966.html
Copyright © 2011-2022 走看看