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