PHP скрипты

MySQL

Apache

phpMyADmin

7.3: Аргументы функций в PHP

Главная Страница » Книги по PHP » Самоучитель PHP 5 для чайников с примерами » Аргументы функций в PHP

Особый интерес представляют аргументы функции, так как здесь необходимо четко понимать, что вы передаете и каким образом. Например, вы решили написать функцию, которая не просто увеличивает значение переменной на единицу, но и выводит его на экран (листинг 7.4).

Листинг 7.4. Функция увеличения числа на единицу и вывода его на экран.

‹html›
‹head›
‹title›Функция увеличения числа на единицу и вывода его на экран‹/title›
‹/head›
‹body›
‹?php
function inc_print($num)
{
$num++;
echo $num;
}
$a = 1;
echo inc_print($a);
echo "‹br›" . $a;
?›
‹/body›
‹/html›

Результат выполнения этой программы смотрите на рис. 7.1

Функция увеличения числа на единицу и вывода его на экран

Видно, что функция вывела совершенно верный результат, но оставила переменную $а без изменений. Происходит это потому, что в функцию передается значение переменной. Эквивалентом в этом случае была бы операция присваивания ($num = $а). Для того чтобы наша функция работала правильно, надо аргументы передавать по ссылке (листинг 7.5).

Листинг 7.5. Передача параметров по ссылке.

‹html›
‹head›
‹title›Передача параметров по ссылке‹/title›
‹/head›
‹body›
‹?php
function inc_print(&$num)
{
$num++;
echo $num;
}
$a = 1;
echo inc_print($a);
echo "‹br›" . $a;
?>
‹/body›
‹/html›

Результат выполнения данной программы смотрите на рис. 7.2.

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

На этот раз функция выполнила поставленную перед ней задачу. В программе мы добавили всего один уже знакомый нам символ & перед аргументом в определении функции. Напомним, что если мы имеем дело со ссылками, то изменение одной переменной влечет за собой изменение другой. Именно поэтому достигается нужный результат.

Стоит заметить, что при передаче аргументов по ссылке нельзя использовать литералы, константы и другие значения, которые не могут изменяться. Например, программа, представленная в листинге 7.6, выдаст сообщение об ошибке.

Листинг 7.6. Особенности передачи параметров по ссылке.

‹html›
‹head›
‹title›Особенности передачи параметров по ссылке‹/title›
‹/head›
‹body›
‹?php
function inc_print(&$num)
{
$num++;
echo $num;
}
echo inc_print(123); // вызовет ошибку
?›
‹/body›
‹/html›

Вы наверняка обратили внимание на встроенные функции с необязательными параметрами. Их также называют параметрами по умолчанию, что более точно характеризует эти аргументы. При определении пользовательских функций они оформляются так, как показано в листинге 7.7.

Листинг 7.7. Функция с параметром по умолчанию.

‹html›
‹head›
‹title›Функция с параметром по умолчанию‹/title›
‹/head›
‹body›
‹?php
function error_msg ($err_str, $flag_end = 0)
{
  echo "‹b›Ошибка!‹br›Причина: " . $err_str . "‹/b>";
  if ($flag_end == 1) exit;
}
error_msg("вы ввели отрицательное число");
echo "Продолжение программы";
›?
‹/body›
‹/html›

В этом случае аргументом по умолчанию является переменная $flag_end, которая определяет, выходить из программы при вызове функции или нет. Здесь мы вызываем функцию error_msg() без указания этого параметра. Поэтому значение переменной $flag_end принимается равным нулю по умолчанию, и мы не выходим из программы. Если значение передать явно, например еrror_msg("вы ничего не ввели", 1), то выполнится оператор exit, и сообщение "Продолжение программы" выведено не будет.

Нужно сказать несколько слов о порядке расположения аргументов при определении функций. Размещайте параметры функции по умолчанию в конце списка аргументов, так как могут возникнуть некоторые проблемы при их вызове (листинг 7.8).

Листинг 7.8. Особенности передачи параметров по ссылке.

‹html›
‹head›
‹title›Особенности передачи параметров по ссылке‹/title›
‹/head›
‹body›
‹?php
function error_msg ($flag_end = 0, $err_str)
{
  echo "‹b›Ошибка!‹br›Причина: " . $err_str . "‹/b›";
  if ($flag_end == 1) exit;
}
error_msg("Вы ввели отрицательное число");
echo "Продолжение программы";
?›
‹/body›
‹/html›

В результате выполнения этой программы РНР сообщит, что пропущен второй параметр.

Поделиться с друзьями