PHP Как присвоить значение некоторым аргументам функции по умолчанию

В следующей функции у нас есть несколько аргументов со значением по умолчанию, как я могу вызвать эту функцию с присвоением значения некоторым из них.

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,

  1. Не приемлемое решение:

    foo('nu a', 'def b', 'nu c');

  2. Не приемлемое решение

    //moving c to second argument
    function foo($a, $c='def c', $b='def b', $d='def d'){ }

Таким образом, аргумент после некоторых аргументов по умолчанию, и я не хочу устанавливать значение по умолчанию для предыдущих аргументов только для одного

1

Решение

Невозможно. Вы ищете именованные параметры, которые не поддерживаются php.

Если вы хотите сделать это, вам придется изменить свой параметр на один массив, а в теле функции извлечь то, что вам нужно, основываясь на ключах.

Кроме этого, вы не можете передать значение переменной c, не передавая в b.

0

Другие решения

Там нет никакого способа «пропустить» аргумент, кроме как указать по умолчанию, как 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');
0

По вопросам рекламы [email protected]