PHP反射和invokeArgs():强制参数使用其默认值

PHP反射和invokeArgs():强制参数使用其默认值,php,reflection,parameters,Php,Reflection,Parameters,我需要使用反射API调用一个函数。该函数有可选参数,我需要调用它,只提供其中的一些参数 例如,我有以下功能: public function doSomething($firstParam, $secondParam = "default", $thirdParam = "default) 我正在使用invokeArgs()调用doSomething(),传递一个表示参数的值数组,忽略将值设置为可选的$secondParam: $parameters = array("firstParam"=

我需要使用反射API调用一个函数。该函数有可选参数,我需要调用它,只提供其中的一些参数

例如,我有以下功能:

public function doSomething($firstParam, $secondParam = "default", $thirdParam = "default)
我正在使用
invokeArgs()
调用
doSomething()
,传递一个表示参数的值数组,忽略将值设置为可选的
$secondParam

$parameters = array("firstParam"=>"value", "thirdParam"=>"thirdValue");
$reflectedDoSomething->invokeArgs($instance, $parameters);
这里发生的情况是,
invokeArgs()
调用一行中设置其参数的方法,而不跳过现在值为“thirdValue”的
$secondParam
,并省略
$thirdParam
。这在逻辑上是正确的。该方法的调用类似于
doSomething(“value”,“thirdValue”)

这里我要做的是强制
$secondParam
使用其默认值。在
$parameters
数组中设置
“secondParam”=>null
不是解决方案,因为
null
是一个值

可以使用反射吗


谢谢

不设置关联名称
secondParam
,而是将
null
作为第二个参数

$parameters = array("firstParam"=>"value", null, "thirdParam"=>"thirdValue");
请参阅对的第一条评论

因此,只需通过一个简单的算法运行params(如果愿意,您可以创建一个函数来包装它):

$reflection = new ReflectionMethod($obj, $method); 

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