User-defined functions
Оновлено: 11.05.2023
Функція може бути визначена за допомогою синтаксису, як показано нижче:
Приклад #1 Псевдокод для демонстрації використання функцій
<?php
function foo($arg_1, $arg_2, /* ..., */ $arg_n)
{
echo "Example function.\n";
return $retval;
}
?>
Усередині функції може з'являтися будь-який коректний PHP-код, навіть інші функції та визначення класів.
Назви функцій відповідають тим же правилам, що й інші мітки в PHP. Правильне ім'я функції починається з літери або символу підкреслення, за яким слідує будь-яка кількість літер, цифр або символів підкреслення. У вигляді регулярного виразу воно буде виглядати так: ^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$.
Дивіться також Посібник з іменування Userland.
Функції не потрібно визначати перед тим, як на них посилатися, за винятком випадків, коли функція визначена умовно, як показано у двох прикладах нижче.
Коли функція визначена умовно, як у двох наведених прикладах. Її визначення має бути оброблено перед викликом.
Приклад #2 Умовні функції
<?php
$makefoo = true;
/* We can't call foo() from here
since it doesn't exist yet,
but we can call bar() */
bar();
if ($makefoo) {
function foo()
{
echo "I don't exist until program execution reaches me.\n";
}
}
/* Now we can safely call foo()
since $makefoo evaluated to true */
if ($makefoo) foo();
function bar()
{
echo "I exist immediately upon program start.\n";
}
?>
Приклад #3 Функції у функціях
<?php
function foo()
{
function bar()
{
echo "I don't exist until foo() is called.\n";
}
}
/* We can't call bar() yet
since it doesn't exist. */
foo();
/* Now we can call bar(),
foo()'s processing has
made it accessible. */
bar();
?>
Всі функції і класи в PHP мають глобальну область видимості - їх можна викликати ззовні функції, навіть якщо вони були визначені всередині неї, і навпаки.
PHP не підтримує перевантаження функцій, а також неможливе перевизначення або перевизначення раніше оголошених функцій.
Примітка: Назви функцій не залежать від регістру символів ASCII від A до Z, хоча зазвичай прийнято викликати функції у тому вигляді, в якому вони з'являються в їхньому оголошенні.
У функціях підтримується як змінна кількість аргументів, так і аргументи за замовчуванням. Дивіться також посилання на функції 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 рівнями рекурсії можуть переповнити стек і призвести до завершення поточного скрипта. Зокрема, нескінченна рекурсія вважається помилкою програмування.