5

可能这是 PHP 的一个限制,但是否有可能以某种方式调用函数 - 并强制执行可选参数的“默认”值 - 即使在函数调用中,给出了可选参数(和 == null)?

也许更容易表明我的意思:

<?php
    function funcWithOptParam($param1, $param2 = 'optional') {
        print_r('param2: ' . $param2);
    }

    funcWithOptParam('something'); // this is the behaviour I want to reproduce

    // this will result in 'param2: optional'

    funcWithOptParam('something', null); // i want $param2 to be 'optional', not null

    // this will result in 'param2: ' instead of 'param2: optional'
?>

现在,对此最简单的答案是“null那时不要写”——但在我的特殊情况下,我得到了array一个function调用参数,并且只能这样做:

<?php
    funcWithOptParam($param[0], $param[1]);
?>

所以即使$param[1]nullnull也会覆盖可选参数的默认值

我只看到一个解决方案 - 跳过可选参数,并这样做:

<?php
    function funcWithOptParam($something, $notOptional) {
         if($notOptional === null) {
              $notOptional = 'defaultvalue';
         }

         ...
    }
?>

但我想知道是否有另一种解决方案。nullPHP中有“真正的”价值吗?这真的转化为“无”吗?像undefined在js中的东西?

4

3 回答 3

3

为什么不将整个数组作为函数参数传递?您只需这样称呼它:

funcWithOptParams($params);

并像这样处理它:

function funcWithOptParams($params) {
     if(!isset($params[1])) {
          $params[1] = 'defaultvalue';
     }

     ...
}

这种方法使您可以只传递您想要指定的参数,并在您不想指定的参数中使用默认值。作为奖励,您不必担心参数的顺序。

于 2012-11-03T14:08:58.100 回答
0

您可以使用func_num_argsfunc_get_args来创建您想要的行为

function funcWithArbitraryNumParams(){
  $args = array();
  if(!empty(func_num_args)){
   $args = func_get_args();
  }

  print_r($args);
}
于 2012-11-03T10:36:45.037 回答
0

您可以获得默认值,但它相当难看......

$function = new ReflectionFunction('your_function_name');

foreach ($function->getParameters() as $param) {
    echo 'Name: ' . $param->getName() . PHP_EOL;
    if ($param->isOptional()) {
        echo 'Default value: ' . $param->getDefaultValue() . PHP_EOL;
    }
    echo PHP_EOL;
}

键盘

您可以检查参数是否为NULL,如果是,则将它们替换为默认值。

于 2012-11-03T10:36:50.267 回答