PHP 具有完整的反射 API,添加了对类、接口、函数、方法和扩展进行反向工程的能力。
此外,反射 API 提供了方法来取出函数、类和方法中的文档注释。


class UserController
{
    public function add()
    {
    }

    // 这里参数需要依赖注入两个对象 
    public function index(Request $request, DB $db)
    {
        $request->all();
        $request->only();
        $db -> get();
    }
}

提供Request 和 DB对象

class Request
{
    public function all()
    {
        echo '获取所有的参数....<hr>';
    }
        public function only()
    {
        echo '获取部分参数.....<hr>';
    }
}
    class DB
{
    public function get()
    {
        echo '获取所有的结果集...<hr>';
    }
}

声明方向

$className  = 'UserController';
$methodName = 'index';

创建反射对象

$class  = new ReflectionClass($className);
$method = new ReflectionMethod($className, $methodName);

获取 UserControllerindex 方法的参数,
并且反射实例化这些参数,把参数存入数组 $args

$params = $method->getParameters();

$args = [];
foreach ($params as $key => $value) {
    $args[] = (new ReflectionClass($value->getClass()->getName())) -> newInstance();
}

最后执行指定方法中的代码

$method->invokeArgs($class->newInstance(), $args);