PHP默认功能参数值,如何为“非最后”参数“传递默认值”?

我们大多数人都知道以下语法:

function funcName($param='value'){
    echo $param;
}
funcName();

Result: "value"

我们想知道如何传递'not last'参数的默认值? 我知道这个术语还很遥远,但是一个简单的例子是:

function funcName($param1='value1',$param2='value2'){
    echo $param1."\n";
    echo $param2."\n";
}

我们如何完成以下任务:

funcName(---default value of param1---,'non default');

Result:

value1
not default

希望这是有道理的,我们希望基本上假设不是最后一个参数的默认值。

谢谢。

anonymous-one asked 2020-06-29T23:04:30Z
3个解决方案
53 votes

PHP不支持您要尝试的操作。 解决此问题的常用方法是传递一个参数数组:

function funcName($params = array())
{
    $defaults = array( // the defaults will be overidden if set in $params
        'value1' => '1',
        'value2' => '2',
    );

    $params = array_merge($defaults, $params);

    echo $params['value1'] . ', ' . $params['value2'];
}

用法示例:

funcName(array('value1' => 'one'));                    // outputs: one, 2
funcName(array('value2' => 'two'));                    // outputs: 1, two
funcName(array('value1' => '1st', 'value2' => '2nd')); // outputs: 1st, 2nd
funcName();                                            // outputs: 1, 2

使用此选项,所有参数都是可选的。 通过传递参数数组,数组中的所有内容都将覆盖默认值。 这可以通过使用array_merge()合并两个数组,用第二个数组中的所有重复元素覆盖第一个数组来实现。

MrCode answered 2020-06-29T23:04:54Z
12 votes

不幸的是,这是不可能的。为了解决这个问题,我建议在您的函数中添加以下行:

$param1 = (is_null ($param1) ? 'value1' : $param1);

然后可以这样称呼它:

funcName (null, 'non default');

Result:

value1
non default
Jeroen answered 2020-06-29T23:05:18Z
1 votes

您问题的简单解决方案是,而不是使用:

funcName(---default value of param1---,'non default');

使用以下语法:

funcName('non default',---default value of param1---);

例:

function setHeight2($maxheight,$minheight = 50) {
    echo "The MAX height is : $maxheight <br>";
    echo "The MIN height is : $minheight <br>";
}

setHeight2(350,250);
setHeight2(350); // will use the default value of 50
Rohit Pavaskar answered 2020-06-29T23:05:47Z
translate from https://stackoverflow.com:/questions/10597114/php-default-function-parameter-values-how-to-pass-default-value-for-not-last