Функция може да бъде дефинира посредством следния синтаксис:
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 ($makefoo) foo();
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);
}
}
?>