Очень часто в функциях с несколькими параметрами часть из них имеет стандартное значение. Тогда при объявлении функции следует использовать параметры по умолчанию. Когда мы такую функцию будем вызывать, то параметры по умолчанию можно не писать - вместо них подставятся некоторые заданные нами стандартные значения. В тех же редких случаях, когда в функцию надо передать нестандартное значение, соответствующие параметры у функции пишутся. Вот пример:
<?
function func($n, $town="New York"){
echo $n;
echo "<br>";
echo $town;
echo "<br>";
}
$k=22;
//Вызов функции с параметром по умолчанию
func($k);
//Вызов функции с заданным параметром
func($k, "Los Angeles");
?>
Указанный фрагмент выведет четыре строки: 22, New York, 22 и Los Angeles.
Параметров по умолчанию у функции может быть несколько. Важно однако, что они должны идти подряд и до конца. Т. е. если некоторый параметр имеет значение по умолчанию, то и все параметры справа от него тоже должны иметь значение по умолчанию:
...
//Правильно
function func1($n, $town="New York", $type=2){
...
}
//Неправильно
function func2($n, $town="New York", $type){
...
}
...
Параметры в функцию в PHP можно передавать по значению (по умолчанию так и делается) и по ссылке. Если вы передаете параметр по значению, то создается копия переменной. Функция может внутри себя изменять такой параметр, но при выходе из функции значение переменной, переданной в качестве параметра, не изменится. Т. е. функция внутри себя имеет дело с локальной копией. Вот поясняющий это пример:
<?
function func($n){
$n++;
echo $n; //Напечатается 9
};
//Вызов функции
$k=8;
func($k);
echo $k; //Напечатается 8
?>
Иногда же нам необходимо, чтобы функция изменяла передаваемые в нее параметры. Т. е. мы хотим, чтобы после выполнения функции переданные в нее параметры получили другое значение. Делается этто так:
<?
function func(&$n){
$n++;
echo $n; //Напечатается 9
};
//Вызов функции
$k=8;
func($k);
echo $k; //Напечатается 9
?>
Обратите внимание на знак амперсанда (&) перед параметром функции:
...
function func(&$n){
...
Именно благодаря ему наша функция получает не копию переменной, а "оригинал".
Это был синтаксис в стиле C/C++. В PHP существует и другой синтаксис для этой цели:
<?
function func($n){
$n++;
echo $n; //Напечатается 9
};
//Вызов функции
$k=8;
func(&$k);
echo $k; //Напечатается 9
?>
Как видите, здесь амперсанд ставится при вызове функции, а не при объявлении, как в первом случае. Если ваша функция всегда должна изменять значение своего параметра то, разумеется, первый способ предпочтительнее (так как программисту ничего не надо будет помнить - просто вызываем функцию и все). Если же ваша функция иногда должна менять свой параметр, а иногда нет, то используйте второй способ.
Уроки по Visual Basic.NET с сайта progs.biz. Написание
программ, создание собственных элементов, примеры и исходники, создание
ActiveX-элементов, работа с базами данных, создание веб-приложений, FAQ и
многое другое.
Уроки по C# -новому языку от Microsoft для платформы .NET. Примеры,
исходники, статьи, FAQ.