CakeFest 2024: The Official CakePHP Conference

Пользовательские функции

Приведём пример синтаксиса для описания функций:

Пример #1 Псевдокод описания функции

<?php

function foo($arg_1, $arg_2, /* ..., */ $arg_n)
{
echo
"Пример функции.\n";
return
$retval;
}

?>

Внутри функции разрешается любой корректный PHP-код, включая другие функции и даже объявления классов.

Имена функций следуют тем же правилам, что и другие метки в PHP. Корректное имя функции начинается с буквы или знака подчёркивания, за которым идёт любое количество букв, цифр или знаков подчёркивания. В виде регулярного выражения имя выражается так: ^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$.

Подсказка

Смотрите также «Руководство по именованию».

Требования объявлять функции раньше появления ссылки на функции — нет, за исключением условного определения функции, как показывают два следующих примера.

Определение функции описывают до вызова функции, когда функцию определяют по условию, как в двух следующих примерах.

Пример #2 Условные функции

<?php

$makefoo
= true;

/* Нельзя вызвать функцию foo() в этом месте,
поскольку функцию ещё не определили, но можно
обратиться к функции bar() */

bar();

if (
$makefoo) {
function
foo()
{
echo
"Я не существую, пока выполнение программы не дойдёт до меня.\n";
}
}

/* Теперь безопасно вызываем функцию foo(),
поскольку выражение переменной $makefoo язык интерпретировал как true */

if ($makefoo) foo();

function
bar()
{
echo
"Я существую сразу после запуска программы.\n";
}

?>

Пример #3 Вложенные функции

<?php
function foo()
{
function
bar()
{
echo
"Я не существую пока не вызовут функцию foo().\n";
}
}

/* Пока нельзя обратиться к функции bar(),
поскольку функцию ещё не определили */

foo();

/* Теперь можно вызвать функцию bar(),
обработка функции foo() сделала её доступной */

bar();

?>

У функций и классов PHP глобальная область видимости — их разрешается вызывать за пределами функции, даже если их определили внутри, и наоборот.

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

Замечание: Имена функций не зависят от регистра символов в кодировке ASCII от A до Z, хотя хорошим тоном будет вызов функций в том виде, в каком функцию указали в объявлении.

Функции PHP поддерживают как списки аргументов переменной длины, так и значения аргументов по умолчанию. Подробнее об этом рассказывают описания функций func_num_args(), func_get_arg() и func_get_args().

В PHP функции разрешается вызывать рекурсивно.

Пример #4 Рекурсивные функции

<?php

function recursion($a)
{
if (
$a < 20) {
echo
"$a\n";
recursion($a + 1);
}
}

?>

Замечание: Рекурсивный вызов функций и методов с глубиной более 100-200 уровней рекурсии может вызвать переполнение стека и привести к аварийному завершению скрипта. В частности, бесконечную рекурсию PHP считает программной ошибкой.

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top