ReflectionMethod::invokeArgs

(PHP 5 >= 5.1.2, PHP 7, PHP 8)

ReflectionMethod::invokeArgs调用参数

说明

public ReflectionMethod::invokeArgs(?object $object, array $args): mixed

调用反射方法并将参数作为数组传递。

参数

object

要调用方法的对象。对于静态方法,可以将 null 传递给此参数。

args

要传递给函数的参数,作为 array

返回值

返回方法结果。

错误/异常

如果 object 参数不包含声明此方法的类的实例,则会引发 ReflectionException

如果方法调用失败,则会引发 ReflectionException

变更日志

版本 说明
8.0.0 args 键现在将被解释为参数名称,而不是被静默忽略。

范例

范例 #1 ReflectionMethod::invokeArgs() 范例

<?php
class HelloWorld {

public function
sayHelloTo($name) {
return
'Hello ' . $name;
}

}

$reflectionMethod = new ReflectionMethod('HelloWorld', 'sayHelloTo');
echo
$reflectionMethod->invokeArgs(new HelloWorld(), array('Mike'));
?>

上面的例子将会输出

Hello Mike

注释

注意:

如果函数有需要引用的参数,则它们必须在传递的参数列表中是引用。

参见

添加注释

用户贡献注释 4 个注释

12
serg dot smertin at gmail dot com
13 年前
我们可以做黑魔法,这在模板块调用中很有用

<?php
$object
->__named('methodNameHere', array('arg3' => 'three', 'arg1' => 'one'));

...

/**
* 通过名称传递方法参数
*
* @param string $method
* @param array $args
* @return mixed
*/
public function __named($method, array $args = array())
{
$reflection = new ReflectionMethod($this, $method);

$pass = array();
foreach(
$reflection->getParameters() as $param)
{
/* @var $param ReflectionParameter */
if(isset($args[$param->getName()]))
{
$pass[] = $args[$param->getName()];
}
else
{
$pass[] = $param->getDefaultValue();
}
}

return
$reflection->invokeArgs($this, $pass);
}
?>
4
agent_harris at secure-mail dot biz
13 年前
对于引用传递问题,有一个简单的解决方法
由于反射 API 必须以通用方式处理所有参数,因此它无法猜测您是否希望按值或引用传递数据。

但似乎您也可以决定从调用函数或方法的地方传递引用(不仅仅是在其声明中使用 & 前缀)。

所以只需执行以下操作;这对我有用

<?php
//...
$method->invoke($object, $inputValue, &$outputValue);
?>

由于这仅在数组和基本数据类型上才需要,因此在大多数情况下,您应该提前知道是否需要按引用传递。但很可能需要始终在声明中保留 & 符号(因为至少在实际函数和您的 invoke 调用之间有两层)。

如果这是预期的行为,那么可能在 invoke 和 invokeArgs 的文档中提及这一点会有意义。
2
CodeCoutureXX at gmail dot com
8 年前
如果您需要对静态函数调用 ReflectionMethod::invokeArgs(),可以将 NULL 作为 $object 参数传递。

示例

<?php
class myClass {
public static
myStaticFunc($a, $b) {
return
$a + $b;
}
}

$ref = new ReflectionMethod('myClass', 'myStaticFunc');
echo
$ref->invokeArgs(NULL, [12, 7]);
?>

产生以下输出

19
0
cweiske at cweiske dot de
13 年前
按引用传递参数有效
<?php $rm->invokeArgs($object, array(&$foo, $bar)); ?>
To Top