Хорошим примером для информирования вас о том, как именно работают параметры php в функциях, будет func_get_args()
, который возвращает все переданные аргументы функции.
И это будет наш пример функции.
function foo($example = 'default')
{
print_r(func_get_args());
}
Теперь мы можем проверить, был ли передан какой-либо аргумент в функцию.
Что произойдет, если мы не передадим какой-либо аргумент?
foo();
// Output
Array
(
)
Мы знаем, что функция была вызвана без какого-либоаргумент, потому что выходной массив пуст.И это тот момент, когда значение по умолчанию используется для нашего параметра функции.Итак, в конечном итоге значение параметра $example
будет равно 'default'
Теперь мы попытаемся передать 2 аргумента функции.
foo('example', 'unnecessary');
// Output
Array
(
[0] => example
[1] => unnecessary
)
Из этого примера мы можем сделать вывод, чтоможет передавать любое количество аргументов, не видя исключения.Это одна из особенностей php.
Но что было передано параметру $example
?
Как сообщает php docs .
аргументы вычисляются слева направо.
Левая сторона для нашего примера - это значение из массива с индексом 0, а правая сторона - последний элемент с (фактически индекс 1)
Итак, под $example
мы имеем 'example'
значение.
В значениях по умолчанию второй аргумент будет игнорироваться, потому что наша функция не имеет соответствующего второго параметра.
Что если мы передадим null
в качестве аргумента?
Этоможет быть сложно, потому что мы можем представить, что функция, вызываемая с null
в качестве аргумента, будет влиять на нашу функцию как функцию, вызываемую без каких-либо аргументов.
Ничего более неправильного.
foo(null);
// Output
Array
(
[0] =>
)
Теперь выдолжен увидеть это.Несмотря на то, что наш аргумент был null
, значение было передано нашей функции и перезаписано значение по умолчанию 'example'
для параметра.Наконец, параметр $example
будет равен null
.