依賴注入

<?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);

 ?>
相關文章
相關標籤/搜索