function — PHP Значения параметров по умолчанию: Как компилятор узнает, какой переданный параметр-значение для какого параметра?

В следующем фрагменте, как это сделать printPhrase знать, если переданные аргументы $a а также $b (поэтому он использует значение по умолчанию $c, или же $a а также $c (поэтому он использует значение по умолчанию $b)?

private function printPhrase ($a, $b='black', $c='candle!' ) {
echo $a . $b . $c; //Prints A black cat! or A black candle!
}

private function callprintPhrase () {
printPhrase('A ', ' cat!');
}

0

Решение

В php аргументы всегда проходят слева направо без пропуска. Так printPhrase('A ', ' cat!'); всегда заполняется значениями первого и второго аргумента функции.

http://php.net/manual/en/functions.arguments.php#functions.arguments.default

Есть существует предложение пропустить параметры.

Если вы хотите использовать параметры по умолчанию, вам нужно переписать свой код, как в этом ответе: https://stackoverflow.com/a/9541822/1503018

2

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

private function callprintPhrase () {
printPhrase('A ', ' cat!');
}

так как вы передали 2 аргумента, они будут рассматриваться как аргументы для $ a и $ b. Так что можно будет напечатать что-то вроде A cat candle! Вам нужно передать нулевое значение во втором аргументе, если оно принимает значение $ b, т.е.

private function callprintPhrase () {
printPhrase('A ','', ' cat!');
}

Это даст вам выход Черная кошка!

0

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