Funkcja może być zdefiniowana używając składni takiej jak poniższa:
Przykład 17-1. Pseudo-kod ilustrujący zastosowanie funkcji
<?php function foo ($arg_1, $arg_2, /* ..., */ $arg_n) { echo "Przykładowa funkcja.\n"; return $retval; } ?>
|
|
Dowolny poprawny kod PHP może się pojawić wewnątrz funkcji, także
definicje innych funkcji i klas.
Nazwy funkcji podlegajÄ… takim samym ograniczeniom jak wszystkie inne
etykiety w PHP. Poprawna nazwa funkcji zaczyna siÄ™ od litery lub
podkreślenia, po których następuje dowolna liczba liter, liczb lub
podkreśleń. Powyższa zasada w postaci wyrażenia regularnego przedstawia
się następująco:
[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*.
W PHP 3, funkcje muszą być zdefiniowane przed odwołaniem do nich. W PHP 4
nie ma takiego wymagania. WyjÄ…tkiem jest warunkowe
definiowanie funkcji, tak jak pokazano to w dwóch przykładach
zamieszczonych poniżej.
Kiedy funkcja jest definiowana w postaci warunkowej, tak jak to
przedstawiono na dwóch poniższych przykładach, jej definicja musi
następować przed jej wywołaniem.
Przykład 17-2. Funkcje warunkowe
<?php
$makefoo = true;
/* Nie można wywołać foo() z tego miejsca, ponieważ funkcja ta jeszcze nie istnieje. Można natomiast wywołać bar() */
bar();
if ($makefoo) { function foo() { echo "Nie istnieję dopóki wykonanie programu nie dojdzie do tego miejsca.\n"; } }
/* W tym momencie można spokojnie wywołać foo() ponieważ $makefoo ma wartość true */
if ($makefoo) foo();
function bar() { echo "Istnieję od samego początku działania programu.\n"; }
?>
|
|
Przykład 17-3. Funkcje wewnątrz funkcji
<?php function foo() { function bar() { echo "Nie istnieję dopóki foo() nie zostanie wywołana.\n"; } }
/* Nie można wywołać bar() ponieważ nie istnieje. */
foo();
/* Teraz można wywołać bar(), ponieważ wywołanie foo() utworzyło tą funkcję. */
bar();
?>
|
|
Wszystkie funkcje i klasy w PHP mają zasięg globalny - można je wywołać
spoza ciała funkcji, nawet jeśli zostały w niej zdefiniowane, i vice
versa.
PHP nie obsługuje przeciążania funkcji. Nie jest także możliwa
od-definiowanie lub przedefiniowanie wcześniej zadeklarowanych funkcji.
Notatka:
W nazwach funkcji nie jest istotna wielkość znaków, jednakże dobrze jest
wywoływać funkcje tak, jak zostały zdeklarowane.
PHP 3 nie obsługuje funkcji o zmiennej liczbie argumentów, ale obsługuje
domyślne argumenty (zobacz rozdzial Wartości domyślne argumentów
aby uzyskać więcej informacji). Od wersji PHP 4 obsługiwane są
jedne i drugie: zobacz Listy
argumentów o zmiennej długości i opisy funkcji
func_num_args(), func_get_arg(), i
func_get_args() aby uzyskać więcej informacji.
W PHP możliwe jest rekurencyjne wywoływanie funkcji. Należy jednak unikać
rekurencyjnych wywołań funkcji lub metod o głębokości większej niż 100-200
poziomów, gdyż może to zniszczyć stos i spowodować przerwanie działania
skryptu.
Przykład 17-4. Funkcje rekurencyjne
<?php function rekurencja($a) { if ($a < 20) { echo "$a\n"; rekurencja($a + 1); } } ?>
|
|