Тело функции – операторы, реализующие алгоритм ее работы
return переменная или выражение;
}
Имя функции выбирается так же, как и имя переменной, только перед ним не ставится символ $. Недопустимо использование в качестве имени функции имен математических функций и ключевых (служебных) слов PHP.
Создадим функцию, вычисляющую сумму двух переменных:
function summa($x, $y) // $x, $y – формальные параметры
{
$z = $x + $y; // $z – локальная переменная
return $z; // возвращение результата вычислений
}
Если строки return $z в функции нет, то она ничего не вернет в вызывающую программу.
Функции располагаются, как правило, в начале программы:
<&php
function summa($x, $y) // $x, $y – формальные параметры
{
$z = $x + $y; // $z – локальная переменная
return $z;
}
$a = 3;
$b = 5;
$c = summa($a, $b); // обращение к функции
echo ‘Сумма = ‘, $c, “<BR>”; // $c=8
?>
Фактические параметры (исходные данные) передаются в функцию по значению. Это означает, что если внутри функции формальные параметры, соответствующие этим фактическим, изменяют свои значения, то фактические параметрыне изменяются:
<&php
function summa($x, $y) // $x, $y – формальные параметры
{
$x++;
$y++;
$z = $x + $y; // $z – локальная переменная
return $z;
}
$a = 3;
$b = 5;
$c = summa($a, $b); // обращение к функции
echo ‘Сумма = ‘, $c, “<BR>”; // $c=10
echo $a, “<BR>”; // $a=3
echo $b, “<BR>”; // $b=5
?>
Чтобы изменения параметров, выполненные внутри функции, были видны и за ее пределами, их необходимо передавать по ссылке (адресу переменной). Для этого в списке формальных параметров перед их именами ставится символ & :
<&php
function summa(&$x, &$y) // &$x, &$y – ссылки
{
$x++;
$y++;
$z = $x + $y; // $z – локальная переменная
return $z;
}
$a = 3;
$b = 5;
$c = summa($a, $b); // обращение к функции
echo ‘Сумма = ‘, $c, “<BR>”; // $c=10
echo $a, “<BR>”; // $a=4
echo $b, “<BR>”; // $b=6
?>
При передаче параметра по ссылке формальному параметру функции передается незначение, а адрес соответствующего фактического параметра.
В функциях можно использовать статические переменные:
function self_count()
{
static $count = 0; // статическая переменная
$count++;
echo $count;
}
При первом обращении к функции статическая переменная принимает начальное значение. При каждом последующем обращении она изменяется.
В PHP имя функции можно присвоить переменной, взяв это имя в кавычки. Если после имени такой переменной поставить в круглых скобках список фактическихпараметров, то эта переменная будет работать как исходная функция:
<&php
function summa($x, $y) // $x, $y – формальные параметры
{
$z = $x + $y; // $z – локальная переменная
return $z;
}
$name = “summa”; // переменной присвоено имяфункции
$a = 3;
$b = 5;
$c = $name($a, $b); // обращение к переменной как к функции
echo ‘Сумма = ‘, $c, “<BR>”; // $c=8
?>
Имена функций можно хранить в массивах:
<?php
function my_func($a)
{
return $a*$a;
}
$func_array=array
(
"sqrt",
"ceil",
"floor",
"round",
"my_func"
);
$x=3.14159265;
echo "Значение х равно $x", "<BR>";
foreach($func_array as $value)
{
echo $value, ' = ',$value($x), "<BR>";
}
echo "<BR>";
?>
На экран будет выведено:
Значение х равно 3.14159265
sqrt = 1.7724538498929
ceil = 4
floor = 3
round = 3
my_func = 9.869604378534
Рекурсия
В PHP поддерживаются рекурсивные вызовы функций – обращение функции к самой себе внутри себя. Приведем классический пример вычисления факториала заданного числа:
function factor($n)
{
if ($n == 0)
return 1;
else return $n * factor($n – 1);
}
Функция dumper()
В целях отладки сценариев часто бывает нужно посмотреть, что содержит та или иная переменная. Для этой цели можно использовать встроенную функцию var_dump().
Следующая полезная функция выводит значение самой сложной переменной, будь то многомерный массив или объект:
//Распечатка дампа переменной на экране
function dumper($obj)
{
echo “<FONT SIZE=2><PRE>”,
htmlspecialchars(dumperGet($obj)),
“</pre></font>”;
}
//Возвращает строку – дамп значения переменной
//в древовидной форме (если это массив или объект).
//В переменной $leftSp хранится строка с пробелами,
//которая будет выводиться слева от текста.
function dumperGet(&$obj, $leftSp=””)
{
if (is_array($obj))
{
$type = “Array[“.count($obj).”]”;
}
elseif (is_object($obj))
{
$type = “Object”;
}
elseif (gettype($obj) == “boolean”)
{
return $obj? “true” : “false”;
}
Else
{
return “\”$obj\””;
}
$buf = $type;
$leftSp .= “ “;
for (Reset($obj); list($k, $v) = each($obj);)
{
if ($k === “GLOBALS”)
continue;
$buf .= “\n$leftSp$k => “.dumperGet($v, $leftSp);
}
return $buf;
}
Функция dumper() использует встроенную функцию htmlspecialchars(), которая заменяет в исходной строке символы ‘<’, ‘>’, ‘”’ на их HTML-эквиваленты <, > и " .
Пример использования функции dumper():
<?php
$my_array = array
(
Array (1, 2, 3, 4, 5),
Array
(
“name”=>”Владимир”,
“fam”=>”Кузнецов”,
“year”=>1995,
“month”=>”май”,
“day”=>15
),