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