是否有一个PHP函数可以为我提供传递的参数( 参数)和任何未传递的默认值?
注意:此函数只返回传递参数的副本,而不考虑默认(未传递)参数。
发布于 2016-04-29 11:43:04
使用ReflectionFunction
function test($a, $b = 10) {
echo $a, ' ', $b;
}
$rf = new ReflectionFunction('test');
foreach ($rf->getParameters() as $p) {
echo $p->getName(), ' - ', $p->isDefaultValueAvailable() ?
$p->getDefaultValue() : 'none', PHP_EOL;
}发布于 2016-04-29 12:24:51
我创建了一个名为func_get_all_args的函数,它返回与func_get_args相同的数组,但包含任何缺少的默认值。
function func_get_all_args($func, $func_get_args = array()){
if((is_string($func) && function_exists($func)) || $func instanceof Closure){
$ref = new ReflectionFunction($func);
} else if(is_string($func) && !call_user_func_array('method_exists', explode('::', $func))){
return $func_get_args;
} else {
$ref = new ReflectionMethod($func);
}
foreach ($ref->getParameters() as $key => $param) {
if(!isset($func_get_args[ $key ]) && $param->isDefaultValueAvailable()){
$func_get_args[ $key ] = $param->getDefaultValue();
}
}
return $func_get_args;
}用法
function my_function(){
$all_args = func_get_all_args(__FUNCTION__, func_get_args());
call_user_func_array(__FUNCTION__, $all_args);
}
public function my_method(){
$all_args = func_get_all_args(__METHOD__, func_get_args());
// or
$all_args = func_get_all_args(array($this, __FUNCTION__), func_get_args());
call_user_func_array(array($this, __FUNCTION__), $all_args);
}这可能需要一些改进,如交流捕捉和抛出错误。
https://stackoverflow.com/questions/36937399
复制相似问题