我正在尝试使用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;