Подтвердить что ты не робот

Почему PHP не бросает ошибку, когда передаю слишком много параметров функции?

Я n00b на php. Я изучал параметры по умолчанию, поэтому я сделал эту функцию.

function doFoo($name = "johnny"){
    echo "Hello $name" . "<br />";
}

Я сделал эти звонки

doFoo();
doFoo("ted");
doFoo("ted", 22);

Первые два напечатали то, что ожидалось, т.е.

Hello johnny
Hello ted

но третий звонок тоже напечатан

Hello ted

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

4b9b3361

Ответ 1

PHP не выдает ошибку при перегрузке функции.

Ответ 2

поскольку функции PHP поддерживают переменное количество параметров.

Ответ 3

Не неправильно передавать функции больше аргументов, чем необходимо.

Вы получите ошибку, только если передадите несколько аргументов.

function test($arg1) {
 var_dump($arg1);
}

test();

Выше приведёт к следующей ошибке:
Uncaught ArgumentCountError: слишком мало аргументов для работы...

Если вы хотите получить первый аргумент плюс все остальные аргументы, переданные функции, вы можете сделать:

function test($arg1, ...$args) {
 var_dump($arg1, $args);
}

test('test1', 'test2', 'test3');

В результате чего:
строка (5) массив "test1" (2) {[0] => строка (5) "test2" [1] => строка (5) "test3"}

Ответ 4

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

Попробуйте вставить это вверху вашего кода:

error_reporting(E_ALL | E_STRICT);