gpt4 book ai didi

php - 我可以将关联数组作为参数传递给 ReflectionMethod::invokeArgs 吗?

转载 作者:可可西里 更新时间:2023-11-01 13:56:14 25 4
gpt4 key购买 nike

是否可以在 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));

Gist

关于php - 我可以将关联数组作为参数传递给 ReflectionMethod::invokeArgs 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8649536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com