PHP Default Function Parameter values, how to 'pass default value' for 'not last' parameters?

别说谁变了你拦得住时间么 提交于 2019-11-26 11:01:43

问题


Most of us know the following syntax:

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

Result: \"value\"

We were wondering how to pass default values for the \'not last\' paramater? I know this terminology is way off, but a simple example would be:

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

How do we accomplsh the following:

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

Result:

value1
not default

Hope this makes sense, we want to basically assume default values for the paramaters which are not last.

Thanks.


回答1:


PHP doesn't support what you're trying to do. The usual solution to this problem is to pass an array of arguments:

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'];
}

Example Usage:

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

Using this, all arguments are optional. By passing an array of arguments, anything that is in the array will override the defaults. This is possible through the use of array_merge() which merges two arrays, overriding the first array with any duplicate elements in the second array.




回答2:


Unfortunately, this is not possible. To get around this, I would suggest adding the following line to your function:

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

You can then call it like this:

funcName (null, 'non default');

Result:

value1
non default



回答3:


The Simple solution of your problem is, instead of using:

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

Use the following Syntax:

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

Example:

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


来源:https://stackoverflow.com/questions/10597114/php-default-function-parameter-values-how-to-pass-default-value-for-not-last

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!