Функции
PHP Manual

Потребителски-дефинирани функции

Функция може да бъде дефинира посредством следния синтаксис:

Example #1 Псевдо-код, демонстриращ употребата на функции

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

Във функциите е разрешена употребата на какъвто и да е валиден код PHP, дори и дефиниция на други функции или класове.

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

Съвет

Вж. също Userland Naming Guide.

Не е необходимо функциите да бъдат дефинирани преди да бъдат използвани, освен в случаите, когато функцията е дефинирана условно, както в двата примера по-долу.

Когато дадена функция е дефинирна условно, то тя трябва да бъде дефинирана преди да бъде извикана.

Example #2 Условни функции

<?php

$makefoo 
true;

/* Не можем да извикаме foo() оттук,
   понеже тя все още не съществува,
   но можем да извикаме bar() */

bar();

if (
$makefoo) {
  function 
foo()
  {
    echo 
"Аз не съществувам докато изпълнението на програмата не стигне до мен.\n";
  }
}

/* Сега можем спокойно да извикаме foo(),
   понеже $makefoo се е изчислила на истина */

if ($makefoofoo();

function 
bar() 
{
  echo 
"Аз съществувам от стартирането на програмата.\n";
}

?>

Example #3 Функции във функции

<?php
function foo() 
{
  function 
bar() 
  {
    echo 
"Аз не съществувам, докато не се извика foo().\n";
  }
}

/* Не можем да извикаме bar() все още,
   понеже не съществува. */

foo();

/* Сега можем да извикаме bar(),
   изпълнението на foo() я
   е направило достъпна. */

bar();

?>

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

PHP не поддържа нито претоварване на функции, нито отменянето на дефиницията или повторното дефиниране на функция, която е била дефинирана преди това.

Забележка: Имената на функциите не са чувствителни към регистъра, но все пак е добра практитка функциите да се извикват със същите имена, с които са били дефинирани.

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

В PHP е възможно рекурсивното извикване на функции. Все пак избягвайте рекурсивното извикване на функция/метод с повече от 100-200 нива на рекурсия, тъй като това може да доведе до смачкване на стека, което да предизвика прекратяване на скрипта.

Example #4 Рекурсивни функции

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


Функции
PHP Manual