Podręcznik PHP
Poprzedni |  | Następny

# Rozdział 17. Funkcje

# Funkcje zdefiniowane przez użytkownika

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); } } ?>`

Poprzedni | Spis treści | Następny
include_once() | Początek rozdziału | Argumenty funkcji