Как избежать аргумента функции, который имеет значение по умолчанию в PHP? - PullRequest
0 голосов
/ 30 апреля 2019

Мне нужно знать, как я могу избежать аргументов, которые имеют значения по умолчанию в PHP?Представьте, что моя функция:

function avg($a = 1 , $b = 2) {
   return $a+$b;
}

, и я хочу вызвать ее в следующих формах:

avg(3,4); // Correct Result: 7
avg(2); // Expected result: 4
avg(,5) // Expected result: 6

Как я могу правильно выполнять вызовы функций выше?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

Я надеюсь, что таким образом вы сможете решить проблему.

Использование нескалярных типов в качестве значений по умолчанию

function avg($a = null,$b =null) {

    $a = is_null($a) ? 1 : $a;
    $b = is_null($b) ? 2 : $b;

   return $a+$b;
}


echo avg(3,4); // Correct Result: 7

echo avg(2,null); // Expected result: 4

echo avg(null,5); // Expected result: 6

0 голосов
/ 30 апреля 2019

Но вы можете сделать это,

function avg(...$args)
{
    list($a, $b) = $args + [1, 2];
    $a           = !empty($a) ? $a : 1;
    return $a + $b;
}
print_r(avg(3, 4)); // Correct Result: 7
print_r(avg(2)); // Expected result: 4
print_r(avg(null, 5)); // Expected result: 6

Демо .

Невозможно пропустить аргументы, которые вы сделали таким образом.Вы можете достичь этого, только если они находятся в конце списка параметров.

Было уже много предложений, отправленных в этом отношении, но, к сожалению, отклонено оттуда.

Вы можете увидеть эти здесь .

...