یک تابع با استفاده از دستور زیر قابل تعریف شدن است:
Example #1 شبه کد نمایش استفاده از توابع
<?php
function foo($arg_1, $arg_2, /* ..., */ $arg_n)
{
echo "Example function.\n";
return $retval;
}
?>
یک کد صحیح PHP میتواند در داخل تابع قرار گیرد حتی تعریف توابع و کلاس .
نام تابع قوانین یکسانی مانند برچسبها پیروی مینماید. یک نام صحیح با یک حرف یا _ شروه شده و پس از آن حروف اعداد یا _ میتواند قرار گیرد. یک عبارت منظم برای این قوانین بصورت یر است: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*.
See also the Userland Naming Guide.
تابع نیاز به تعریف پیش از استفاده ندارند به جز زمانی که یک تابع بصورت شرطی همانند مثالهای پایین تعریف شده باشد.
وقتی یک تابع بصورت شرطی تعریف میگردد همان طور که در دو مثال پایین نشان داده شده است.تعریف آن باید پیش از فراخوانی آن نوشته شده باشد.
Example #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";
}
?>
Example #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 processesing has
made it accessible. */
bar();
?>
تمام توابع و کلاسها در PHP حوزه جهانی دارند - آنها را میتوان خارج از تابع فراخواند حتی اگر در داخل تعریف شده باشد و یا برعکس.
PHP از بارگذاری توابع پشتیبانی نمینماید و یک تابع از پیش تعریف شده را دوباره تعریف کرد یا از تعریف خارج نمود.
Note: نامهای تابع غیرحساس به حروف بزرگ یا کوچک است با این وجود فراخوانی تابع به همان صورت تعریف آنها بسیار خوب است.
هر دو تعداد آرگومان متغیر و آرگومان پیشفرض در تابعها فراخوانی میگردد. همچنین مرجعهای تابع برای func_num_args() func_get_arg() و func_get_args() برای اطلاعات بیشتر ببینید.
میتوان توابع بازگشتی را در PHP فراخواند. به هر حال توابع متدهای بازگشتی با بشاز ۱۰۰-۲۰۰ بار فراخوانی میتواند موجب اتمام پشته در اسکریپت فعلی گردد.
Example #4 توابع بازگشتی
<?php
function recursion($a)
{
if ($a < 20) {
echo "$a\n";
recursion($a + 1);
}
}
?>