Это стандартное поведение PHP? - PullRequest
5 голосов
/ 30 июня 2010

Это работает без предупреждения:

function test($a)
{
    echo 1;
}
test(2, 1);

Это вызовет предупреждение:

function test($a)
{
    echo 1;
}
test();

Если это стандарт, есть ли причина для этого?

Ответы [ 3 ]

15 голосов
/ 30 июня 2010

Поскольку в первом примере test() может использовать func_get_args() для доступа к своим аргументам, поэтому он не должен выдавать ошибку.

Во втором примере $a не является обязательным.Если вы хотите, чтобы он был необязательным, отметьте значение по умолчанию в сигнатуре аргументов следующим образом:

function test($a = 1)
{
    echo 1;
}
test();

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

В первом отредактированном примере вы сможете получить доступ к 2 как $a, однако 1 будет только доступным через func_get_args() (илииз его похожих функций, таких как func_get_arg()).

1 голос
/ 30 июня 2010

Это правильное поведение. В объявлении вашей функции указано, что он ожидает один аргумент. Если вы хотите сделать аргумент функции необязательным, вам следует применить значение по умолчанию. В противном случае вы выдадите исключение. Прочитайте документацию PHP по Аргументы функций для получения полной информации о том, как объявлять свои функции и способы передачи значений.

[Редактировать] Это должно хорошо работать для вас:

function test($a = null)
{
    echo 1;
}
test();
0 голосов
/ 30 июня 2010

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

Кроме того, мне интересно, может ли это быть как-то связано с тем фактом, что PHP позволит вам объявлять значения по умолчанию для значений параметров, поэтому предупреждение может состоять в том, чтобы предотвратить ситуацию, когда вы просто забыли задать значение $ aa по умолчанию

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