使用php ReflectionClass我可以找到我必须在类构造函数中注入哪些参数来创建新实例.
$class = new ReflectionClass($this->someClass);
$constructor = $class->getConstructor();
$parameters = $constructor->getParameters();
是否还有一种方法可以获得这些参数的依赖关系.
所以如果someClass的构造函数看起来像这样:
public function __construct(Dependency $dependency){
$this->dependency = $dependency;
}
解决方法:
ReflectionMethod::getParameters
返回ReflectionParameter
对象的数组. ReflectionParameters有一个名为getClass的方法,它将返回有关param的typehint的信息.
例:
<?PHP
interface Y { }
class X
{
public function __construct(Y $x, $y=null)
{
}
}
$ref = new \ReflectionClass('X');
$c = $ref->getConstructor();
foreach ($c->getParameters() as $p) {
var_dump($p->getClass());
}
输出:
class ReflectionClass#5 (1) {
public $name =>
string(1) "Y"
}
NULL
Silex的ControllerResolver
有一个很好的例子,说明如何使用它:
<?PHP
// $params is an array of ReflectionParameter instances
protected function doGetArguments(Request $request, $controller, array $parameters)
{
foreach ($parameters as $param) {
// check to see if there's a class and if there is, see if the app property
// is the same type. If so, set the attribute on the request
if ($param->getClass() && $param->getClass()->isinstance($this->app)) {
$request->attributes->set($param->getName(), $this->app);
break;
}
}
return parent::doGetArguments($request, $controller, $parameters);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。