您好,欢迎访问一九零五行业门户网

使用命名参数调用 PHP 函数

python 很棒的一点是它能够使用名字将参数传递到一个函数,看起来是这样的:
my_foo_function(param_name=value, another_param_name=another value)
今天我想在 php 5.4 中做同样的事情(可轻松移植到 php 5.3),我写了一个 call_user_func_named 函数,类似 php 内置的 call_user_func_array 函数,代码如下:
getparameters() as $p ){
    if( $p->isoptional() ){
      if( isset($arr[$p->name]) ){
        $params[] = $arr[$p->name];
      }else{
        $params[] = $p->getdefaultvalue();
      }
    }else if( isset($arr[$p->name]) ){
      $params[] = $arr[$p->name];
    }else{
      throw new missingargumentexception(missing parameter $p->name);
    }
  }
  return $ref->invokeargs( $params );
}
call_user_func_named_array($x, ['foo' => 'hello ', 'bar' => 'world']); //pass all parameterss
call_user_func_named_array($x, ['bar' => 'world']); //only pass one parameter
call_user_func_named_array($x, []); //will throw exception
更新:很感谢一些热心的贡献者做的一些改进:
getparameters() as $p ){
    if (!$p->isoptional() and !isset($arr[$p->name])) throw new missingargumentexception(missing parameter $p->name);
    if (!isset($arr[$p->name])) $params[] = $p->getdefaultvalue();
    else $params[] = $arr[$p->name];
  }
  return $ref->invokeargs( $params );
}
function make_named_array_function($func) {
  return function($arr) use ($func) {
    return call_user_func_named_array($func,$arr);
  };
}
call_user_func_named_array($x, ['foo' => 'hello ', 'bar' => 'world']); //pass all parameterss
call_user_func_named_array($x, ['bar' => 'world']); //only pass one parameter
call_user_func_named_array($x, []); //will throw exception
$y = make_named_array_function($x);
$y(['foo' => 'hello ', 'bar' => 'world']); //pass all parameterss
$y(['bar' => 'world']); //only pass one parameter
$y([]); //will throw exception
其它类似信息

推荐信息