В следующей функции у нас есть несколько аргументов со значением по умолчанию, как я могу вызвать эту функцию с присвоением значения некоторым из них.
function foo($a, $b='def b', $c='def c', $d='def d'){
//....
}
//call foo for $a='nu a' and $c='nu c'
foo('nu a', $c='nu c'); //but b will be assigned
Я хочу установить значение для $c
и не хочу назначать их всех только для $c
,
Не приемлемое решение:
foo('nu a', 'def b', 'nu c');
Не приемлемое решение
//moving c to second argument
function foo($a, $c='def c', $b='def b', $d='def d'){ }
Таким образом, аргумент после некоторых аргументов по умолчанию, и я не хочу устанавливать значение по умолчанию для предыдущих аргументов только для одного
Невозможно. Вы ищете именованные параметры, которые не поддерживаются php.
Если вы хотите сделать это, вам придется изменить свой параметр на один массив, а в теле функции извлечь то, что вам нужно, основываясь на ключах.
Кроме этого, вы не можете передать значение переменной c, не передавая в b.
Там нет никакого способа «пропустить» аргумент, кроме как указать по умолчанию, как false
, ''
или же null
,
Вы будете использовать что-то вроде этого:
function foo($settings) {
$a = $settings['a'];
$b = $settings['b'];
$c = $settings['c'];
$d = $settings['d'];
# code...
}
foo($settings = array(
'a' => null,
'b' => 'def b',
'c' => 'def c',
'd' => 'def d',
));
Или в индексированном массиве вы можете использовать list()
конструкция для обработки значений массива, например:
function foo($settings) {
list($a, $b, $c, $d) = $settings;
# code...
}
foo(array(null, 'def b', 'def c', 'def d'));
По крайней мере, вы можете переместить то, что, по вашему мнению, не ожидалось, большую часть времени в конец списка аргументов в определении функции.
function foo($a, $b = 'def b', $c = 'def c', $d = 'def b') {
# code...
}
foo($a = 'def a');