Forum und email
Funkcje

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