- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
是否可以在 ReflectionMethod::invokeArgs
中将参数作为关联数组传递?这将允许我以不同于声明的顺序传递参数。
例如:
class A
{
public function someMethod($a, $b)
{
return sprintf("a - %s, b - %s", $a, $b);
}
}
$rm = new ReflectionMethod('A', 'someMethod');
echo $rm->invokeArgs(new A(), array('b' => 1, 'a' => 2));
最佳答案
您可以通过覆盖 invokeArgs
方法并实现您需要的功能来实现此目的(在您的情况下,您似乎想要使用命名参数):
class ReflectionMethodA extends ReflectionMethod
{
public function invokeArgs($object, Array $args = array())
{
$parameters = $this->getParameters();
foreach($parameters as &$param)
{
$name = $param->getName();
$param = isset($args[$name]) ? $args[$name] : $param->getDefaultValue();
}
unset($param);
return parent::invokeArgs($object, $parameters);
}
}
$rm = new ReflectionMethodA('A', 'someMethod');
echo $rm->invokeArgs(new A(), array('b' => 1, 'a' => 2));
输出:
a - 2, b - 1
编辑:改进(支持命名和编号参数以及通过引用传递)和更灵活的变体(用于任何回调)是以下类,将任何有效的回调作为它的构造函数中的参数。
用法:
$rc = new ReflectedCallback(array(new A(), 'someMethod'));
echo $rc->invokeArgs(array('b' => 1, 'a' => 2));
关于php - 我可以将关联数组作为参数传递给 ReflectionMethod::invokeArgs 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8649536/
是否可以在 ReflectionMethod::invokeArgs 中将参数作为关联数组传递?这将允许我以不同于声明的顺序传递参数。 例如: class A { public functio
首先,我要测试一个功能: private function testMe (array &$output) { $output['a'] = 3; // $$$$ $output gets c
似乎用词不当,因为在 PHP 5.3 中不推荐使用引用传递...无论如何,我想做的是使用反射编写一个单元测试框架,它允许您将参数传递给需要的方法一个引用。例如 class Bar { func
我需要使用反射 API 调用一个函数。该函数具有可选参数,我需要调用它来提供其中的一些参数。 例如,我有这个功能: public function doSomething($firstParam, $
根据 this邮件列表讨论,在 Zend MVC Controller 中访问应用程序资源的推荐方法是: $this->getInvokeArg('bootstrap')->getResource('
我是一名优秀的程序员,十分优秀!