Search code examples
phpfunctionparametersdefault

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


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.


Solution

  • 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.