Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何获取可选参数的默认值_Php_Function_Optional Parameters - Fatal编程技术网

Php 如何获取可选参数的默认值

Php 如何获取可选参数的默认值,php,function,optional-parameters,Php,Function,Optional Parameters,这可能是PHP的一个限制,但是否可能以某种方式调用函数并强制执行可选参数的“默认”值,即使在函数调用中给定了可选参数(并且==null) 也许更容易表达我的意思: <?php function funcWithOptParam($param1, $param2 = 'optional') { print_r('param2: ' . $param2); } funcWithOptParam('something'); // this is the

这可能是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'
?>
因此,即使
$param[1]
null
null
也将覆盖可选参数的默认值

我只看到一种解决方案—跳过可选参数,并按如下方式操作:

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

         ...
    }
?>

但我想知道是否有其他解决办法。PHP中是否存在“real”
null
值?这真的意味着什么都没有?类似于js中未定义的

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

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

  print_r($args);
}

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

$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,如果是,则将其替换为默认值。

为什么不将整个数组作为函数参数传递? 你可以这样称呼它:

funcWithOptParams($params);
这样处理:

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

     ...
}

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

一个简单的解决方案是
preg\u匹配
源代码以找到默认值。很好的答案,我正在寻找一种更优雅的方法来调用一个有很多(部分可选)参数的函数。这样,我就不必费心按照函数中定义的正确顺序调用具有相同默认值的函数。谢谢你的想法!
function funcWithOptParams($params) {
     if(!isset($params[1])) {
          $params[1] = 'defaultvalue';
     }

     ...
}