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 рівнями рекурсії можуть переповнити стек і призвести до завершення поточного скрипта. Зокрема, нескінченна рекурсія вважається помилкою програмування.