В следующем фрагменте, как это сделать 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!');
}
В php аргументы всегда проходят слева направо без пропуска. Так printPhrase('A ', ' cat!');
всегда заполняется значениями первого и второго аргумента функции.
http://php.net/manual/en/functions.arguments.php#functions.arguments.default
Есть существует предложение пропустить параметры.
Если вы хотите использовать параметры по умолчанию, вам нужно переписать свой код, как в этом ответе: https://stackoverflow.com/a/9541822/1503018
private function callprintPhrase () {
printPhrase('A ', ' cat!');
}
так как вы передали 2 аргумента, они будут рассматриваться как аргументы для $ a и $ b. Так что можно будет напечатать что-то вроде A cat candle!
Вам нужно передать нулевое значение во втором аргументе, если оно принимает значение $ b, т.е.
private function callprintPhrase () {
printPhrase('A ','', ' cat!');
}
Это даст вам выход Черная кошка!