我正在尝试使用PHP反射根据 Controller 方法中参数的类型自动动态加载模型的类文件。这是一个示例 Controller 方法。

<?php

class ExampleController
{
    public function PostMaterial(SteelSlugModel $model)
    {
        //etc...
    }
}

到目前为止,这就是我所拥有的。
//Target the first parameter, as an example
$param = new ReflectionParameter(array('ExampleController', 'PostMaterial'), 0);

//Echo the type of the parameter
echo $param->getClass()->name;

这可以正常工作,并且输出将像预期的那样是“SteelSlugModel”。但是,有可能尚未加载模型的类文件,并且使用getClass()要求定义该类-我这样做的部分原因是自动加载 Controller Action 可能需要的任何模型。

有没有一种方法可以获取参数类型的名称而不必先加载类文件?

最佳答案

我认为唯一的方法是export和操作结果字符串:

$refParam = new ReflectionParameter(array('Foo', 'Bar'), 0);

$export = ReflectionParameter::export(
   array(
      $refParam->getDeclaringClass()->name,
      $refParam->getDeclaringFunction()->name
   ),
   $refParam->name,
   true
);

$type = preg_replace('/.*?(\w+)\s+\$'.$refParam->name.'.*/', '\\1', $export);
echo $type;

10-07 17:49