Почему PHP не выдает ошибку, когда я передаю слишком много параметров в функцию? - PullRequest
13 голосов
/ 28 октября 2011

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

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

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

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

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

Hello johnny  
Hello ted

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

Hello ted 

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

Ответы [ 4 ]

18 голосов
/ 28 октября 2011

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

3 голосов
/ 28 октября 2011

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

0 голосов
/ 05 апреля 2019

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

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

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" }

0 голосов
/ 28 октября 2011

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

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

error_reporting(E_ALL | E_STRICT);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...