Функция может быть определена с использованием следующего синтаксиса:

Пример #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]*$.

Совет

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

Когда функция определена условным образом, как показано в двух приведенных примерах. Его определение должно быть обработано до вызова.

 

Пример #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 уровнями рекурсии могут разбить стек и вызвать завершение текущего скрипта. В частности, бесконечная рекурсия считается ошибкой программирования.