私信  •  关注

Francisco Luz

Francisco Luz 最近创建的主题
Francisco Luz 最近回复了
8 年前
回复了 Francisco Luz 创建的主题 » php python样式的函数变量[重复]

这里有一个解决方案:

function set_param_defaults($params) {
  foreach($params['default_values'] as $arg_name => $arg_value) {
    if (!isset($params[$arg_name])) {
      $params[$arg_name] = $arg_value;
    }
  }

  return $params;
}

function foo($z, $x = null, $y = null) {
  $default_values = ['x' => 'default value for x', 'y' => 'default value for y'];
  $params = set_param_defaults(get_defined_vars());

  print "$z\n";
  print $params['x'] . "\n";
  print $params['y'] . "\n";
}

foo('set z value', null, 'set y value');
print "\n";
foo('set z value', 'set x value');

或者: 就我个人而言,我会采用这种方法。

function foo($z, $x_y) {
  $x_y += ['x' => 'default value for x', 'y' => 'default value for y'];

  print "$z\n";
  print $x_y['x'] . "\n";
  print $x_y['y'] . "\n";
}

foo('set z value', ['y' => 'set y value']);
print "\n";
foo('set z value', ['x' => 'set x value']);

两个例子的打印输出。

第一呼叫:

  • 集合Z值
  • X的默认值
  • 集合Y值

第二呼叫:

  • 集合Z值
  • 集X值
  • Y的默认值