Funkcje definiowane przez użytkownika
Funkcja może być definiowana przy użyciu następującej składni:
Przykład #1 Pseudokod demonstrujący użycie funkcji
<?php
function foo($arg_1, $arg_2, /* ..., */ $arg_n)
{
echo "Przykładowa funkcja.\n";
return $retval;
}
?>
Każdy poprawny kod może być użyty wewnątrz funkcji,
łącznie z definicjami innych funkcji i
klas.
Nazwy funkcji obowiązują identyczne zasady, jak w przypadku wszystkich innych etykiet w PHP.
Poprawna nazwa funkcji zaczyna się od litery lub podkreślnika, po których następuje
dowolna ilość liter, cyfr i podkreślników. Jako wyrażenie regularne, określone
zostałoby to następująco:
[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
.
Funkcje nie muszą być zdefiniowane przed odniesieniem się do nich,
oprócz sytuacji, w których funkcja jest
zdefiniowana warunkowo jak w dwóch poniższych przykładach.
Kiedy funkcja jest zdefiniowana warunkowo, jak w dwóch poniższych przykładach,
jej definicja musi być przetworzona przed
jej wywołaniem.
Przykład #2 Funkcje zdefiniowane warunkowo
<?php
$makefoo = true;
/* Nie możemy tu wywołać foo()
ponieważ jeszcze nie istnieje,
ale możemy wywołać bar() */
bar();
if ($makefoo) {
function foo()
{
echo "Nie istnieję, dopóki nie zostanę wykonana.\n";
}
}
/* Teraz możemy bezpiecznie wywołać foo()
ponieważ $makefoo ma wartość logiczną 1 */
if ($makefoo) foo();
function bar()
{
echo "Istnieję od początku działania skryptu.\n";
}
?>
Przykład #3 Funkcje wewnątrz funkcji
<?php
function foo()
{
function bar()
{
echo "Nie istnieję, dopóki foo() nie jest wywołana.\n";
}
}
/* Nie możemy tu wywołać bar()
ponieważ jeszcze nie istnieje. */
foo();
/* Teraz możemy wywołać bar(),
wykonanie foo() spodowało
że jest to już możliwe. */
bar();
?>
Wszystkie funkcje i klasy w PHP mają globalny zasięg - mogą być
wykonane poza funkcją, nawet jeśli były zdefiniowane wewnątrz niej, i odwrotnie.
PHP nie umożliwia przeładowywania funkcji, nie jest też możliwe
usunięcie jej definicji lub redefiniowanie poprzednio określonych funkcji.
Informacja:
Nazwy funkcji nie rozróżniają wielkości liter, ale dobrym zwyczajem jest
wywoływanie ich w formie, w której zostały zdefiniowane.
Zarówno przyjmowanie różnej ilości
argumentów jak i wartości domyślne
argumentów są obsługiwane w funkcjach. Zobacz także opisy
funkcji
func_num_args(),
func_get_arg(), i
func_get_args() aby uzyskać więcej informacji.
W PHP jest możliwe wykonywanie rekurencyjnych funkcji.
Przykład #4 Funkcje rekurencyjne
<?php
function recursion($a)
{
if ($a < 20) {
echo "$a\n";
recursion($a + 1);
}
}
?>
Informacja:
Rekurencyjne wywoływanie funkcji/metod z ponad 100-200 poziomami rekurencji
może spowodować przepełnienie stosu i zakończenie wykonywania skryptu. W
szczególności nieskończona rekurencja jest uznawana za błąd programistyczny.