Значения параметров 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!');
    }

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

Другие вопросы по тегам