Информация может передаваться в функцию через список аргументов,
который является списком разделённых запятыми переменных и/или констант.
PHP поддерживает разбор аргументов по значению (по умолчанию),
разбор по ссылке и
значения по умолчанию. Списки
аргументов Variable-length поддерживаются только в PHP 4 и позднее; см.
Списки аргументов переменного размера и статьи о функциях
func_num_args(),
func_get_arg() и
func_get_args(). Аналогичный эффект может быть достигнут в PHP 3 путём передачи функции
массива аргументов:
function takes_array($input)
{
echo "$input[0] + $input[1] = ", $input[0]+$input[1];
} |
По умолчанию аргументы передаются в функцию по значению (поэтому, если вы
изменяете значение аргумента внутри функции, оно не изменяется за пределами
этой функции). Если вы хотите дать функции возможность модифицировать свои
аргументы, вы обязаны передавать их по ссылке. Если вы всегда хотите передавать аргументы по ссылке, вы можете ввести
префикс-амперсанд (&) в имени аргумента в определении функции:
function add_some_extra(&$string)
{
$string .= 'and something extra.';
}
$str = 'This is a string, ';
add_some_extra($str);
echo $str;// выводит 'This is a string, and something extra.' |
Функция может определить значения по умолчанию в стиле C++ для скалярных аргументов:
function makecoffee ($type = "cappuccino")
{
return "Making a cup of $type.\n";
}
echo makecoffee ();
echo makecoffee ("espresso"); |
Вывод будет таким:
Making a cup of cappuccino.
Making a cup of espresso. |
Значение по умолчанию обязано быть константным выражением, а не (например)
переменной или членом класса. Обратите внимание, что, при использовании аргументов по умолчанию, любые
значения по умолчанию должны находиться справа от любых значений не по
умолчанию; иначе что-нибудь может работать не так, как ожидалось.
Рассмотрим следующий фрагмент кода:
function makeyogurt ($type = "acidophilus", $flavour)
{
return "Making a bowl of $type $flavour.\n";
}
echo makeyogurt ("raspberry"); // не будет работать так, как ожидается |
Вывод этого примера:
Warning!: Missing argument 2 in call to makeyogurt() in
/usr/local/etc/httpd/htdocs/php3test/functest.html on line 41
Making a bowl of raspberry. |
Теперь сравним с этим:
function makeyogurt ($flavour, $type = "acidophilus")
{
return "Making a bowl of $type $flavour.\n";
}
echo makeyogurt ("raspberry"); // работает как положено |
На выводе этого примера:
Making a bowl of acidophilus raspberry. |
В PHP 4 имеется поддержка списков аргументов переменного размера/variable-length
в пользовательских функциях. Это довольно легко делается функциями
func_num_args(), func_get_arg() и
func_get_args(). Специального синтаксиса не нужно, и списки аргументов могут по-прежнему
явно предоставляться в определениях функций и будут вести себя как обычно. |