Аргументы функции

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

PHP поддерживает передачу аргументов по значению (по умолчанию), передачу аргументов по ссылке, и значения по умолчанию. Списки аргументов переменной длины также поддерживаются. Можно передать в функцию больше агрументов, чем объявлено, но не меньше.

  • func_num_args() - количество аргументов
  • func_get_arg() - аргумент по индексу
  • func_get_args() - массив аргументов функции

Передача аргументов по ссылке

По умолчанию аргументы в функцию передаются по значению (это означает, что если вы измените значение аргумента внутри функции, то вне ее значение все равно останется прежним). Если вы хотите разрешить функции модифицировать свои аргументы, вы должны передавать их по ссылке.

Если вы хотите, что бы аргумент всегда передавался по ссылке, вы можете указать амперсанд (&) перед именем аргумента в описании функции.

Замечание: передача агрументов по ссылке во время вызова функции была удалена в PHP5.4:

function foo($a)
{
    echo $a;
}

$a = 1;
foo(&$a); // Ошибка!!!

Значения аргументов по умолчанию

Функция может определять значения по умолчанию для скалярных аргументов. PHP также позволяет использовать массивы (array) и специальный тип NULL в качестве значений по умолчанию.

Значение по умолчанию должно быть константным выражением, а не (к примеру) переменной или вызовом функции/метода класса.

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

Замечание: Начиная с PHP 5, значения по умолчанию могут быть переданны по ссылке.

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

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

test(); // Выведет 2

Подсказки типов

Объявления типов позволяют функциям строго задавать тип передаваемых параметров. Передача в функцию значений несоответствующего типа будет приводить к ошибке: в PHP 5 это будет обрабатываемая фатальная ошибка.

Чтобы объявить тип агрумента, необходимо перед его именем добавить имя требуемого типа.

Замечание: При комбинации типа переменной и значением по умолчанию, значение по умолчанию должно быть NULL.

Замечание: При передачи NULL в агрумент с подсказкой типа будет ошибка.

Типы данных, которые можно указать:

Тип Описание
Имя класса/интерфейса Агрумент должен быть instanceof, что и имя класса или интерфейса.
array Аргумент должен быть типа array.
callable Аргумент должен быть типа callable.