依赖注入

<?php 

    class UserController
    {
        public function add()
        {

        }

        public function index(Request $request, DB $db)
        {
            $request->all();
            $request->only();
            $db -> get();
        }
    }

    class Request
    {
        public function all()
        {
            echo '获取全部的参数....<hr>';
        }

        public function only()
        {
            echo '获取部分参数.....<hr>';
        }
    }

    class DB
    {
        public function get()
        {
            echo '获取全部的结果集...<hr>';
        }
    }

    // $request = new Request;
    //利用php的反射机制
    // $request = new ReflectionClass('Request');
    // $obj = $request->newInstance();

    //声明方向
    $className = 'UserController';
    $methodName = 'index';

    //建立反射对象
    $class = new ReflectionClass($className);
    $method = new ReflectionMethod($className, $methodName);

    //获取当前方法的参数列表
    $params = $method->getParameters();

    // $cnames = [];
    //执行方法时的参数列表
    $args = [];
    foreach ($params as $key => $value) {
        // $cnames[] = $value->getClass()->getName();
        $args[] = (new ReflectionClass($value->getClass()->getName())) -> newInstance();
    }

    //执行指定方法中的代码 index
    $method->invokeArgs($class->newInstance(), $args);

 ?>
相关文章
相关标签/搜索