Does PHP have "named parameters" so that early arguments can be omitted and later arguments can be written? [duplicate]
In PHP you can call a function with no arguments passed in so long as the arguments have default values like this:
function test($t1 ='test1',$t2 ='test2',$t3 ='test3')
{
echo "$t1, $t2, $t3";
}
test();
However, let's just say I want the last one to be different but the first two parameters should use their default values. The only way I can think of is by doing this with no success:
test('test1','test2','hi i am different');
I tried this:
test(,,'hi i am different');
test(default,default,'hi i am different');
Is there clean, valid way to do this?
Use arrays :
function test($options = array()) {
$defaults = array(
't1' => 'test1',
't2' => 'test2',
't3' => 'test3',
);
$options = array_merge($defauts, $options);
extract($options);
echo "$t1, $t2, $t3";
}
Call your function this way :
test(array('t3' => 'hi, i am different'));
You can't do that using raw PHP. You can try something like:
function test($var1 = null, $var2 = null){
if($var1 == null) $var1 = 'default1';
if($var2 == null) $var2 = 'default2';
}
and then call your function, with null
as the identifier of the default variable. You can also use an array with the default values, that will be easier with a bigger parameter list.
Even better is to try to avoid this all, and rethink your design a bit.
The parameters with default values have to be last, after the others, in PHP and all the others up to that point must be filled in when calling the function. I don't know of anyway to pass a value that triggers the default value.
What I normally do in those situations is to specify the parameters as an array instead. Have a look at the following example (untested):
<?php
test(array('t3' => 'something'));
function test($options = array())
{
$default_options = array('t1' => 'test1', 't2' => 'test2', 't3' => 'test3');
$options = array_merge($default_options, $options);
echo $options['t1'] . ', ' . $options['t2'] . ', ' . $options['t3'];
}
?>