PHP BLOG 3
Omówienie funkcji
Funkcja jest fragmentem kodu, który można wywoływać w różnych momentach i miejscach programu. Funkcję definiuje się raz, najczęściej na początku skryptu. Później można funkcję wywoływać dowolną ilość razy, w zależności od potrzeb. Jest to bardzo wygodne rozwiązanie. Jeśli jakaś funkcja jest błędna to wystarczy poprawić kod w jednym miejscu.
Ogólna definicja funkcji:
function nazwa (argument1, argument2, /* ... */, argumentN) {
instrukcja;
return wartość_zwracana;
}
Nazwa funkcji musi się zaczynać od litery lub znaku podkreślenia, natomiast później może zawierać małe lub duże litery, cyfry i znaki podkreślenia. Nazwa funkcji nie musi zaczynać się od znaku $.
Argumenty funkcji nie są obowiązkowe, można tworzyć funkcje bezargumentowe. Opcjonalne jest również używanie instrukcji return, której zadaniem jest zakończenie wykonywania funkcji i zwrócenie wartości obliczonej przez funkcję.
Przekazywanie argumentów może odbywać się na dwa sposoby: - przez wartość - argument $liczba jest traktowany jak zwykła zmienna.
Przykład funkcji:
//deklaracja funkcji obliczające wartość bezwzględną liczby
function rwAbs($liczba) {
if ($liczba < 0)
$liczba = -$liczba;
return $liczba;
}
//wywołanie funkcji
$wynik = rwAbs(-7);
echo $wynik;
- przez referencję – używany gdy argumentem jest zmienna. Manipulacja zmienną $liczba, a zwłaszcza zmiana jej wartości, powoduje zmianę wartości zmiennej zewnętrznej, przekazanej jako argument funkcji.
Przykład funkcji:
// deklaracja funkcji obliczające wartość bezwzględną liczby
function rwAbs(&$liczba_arg) {
$liczba = $liczba_arg;
if ($liczba < 0)
$liczba = -$liczba;
return $liczba;
}
// Wywołanie funkcji
$a = -7;
$wynik = rwAbs($a);
echo $wynik."<br />";
PHP dostarcza zestaw predefiniowanych funkcji. Zostały one podzielone tematycznie. Ich listę wraz ze szczegółowymi opisami funkcji można znaleźć w dokumentacji PHP (www.php.net).
Jak tworzymy funkcję w PHP? W jaki sposób wywołujemy funkcje? W jaki sposób wysyłamy argumenty do funkcji? W jaki sposób zwracamy dane z funkcji?
Przeanalizujmy napisany kod. Przedstawia funkcję, której zadaniem jest wyświetlenie na ekranie dwóch komunikatów. Jest to jedynie deklaracja. Żeby użyć tak napisanej funkcji należy ją wywołać. Wywołanie przedstawione jest poniżej:
Jak widać, żeby uzyć napisanej funkcji, wystarczy napisać jej nazwę. Jak każde polecenie w PHP, tak również wywołanie napisanej przez nas funkcji, musi być zakończone średnikiem. Co znaczą nawiasy między nazwą, a średnikiem? Jest to miejsce na podanie argumentów funkcji. Skoro nasza funkcja nie przyjmuje żadnych, są one puste. Nie należy jednak zapominać o ich umieszczeniu, nawet gdy funkcja jest bezargumentowa!
Zasięg zmiennej jest zależny od miejsca, w jakim została zdefiniowana. Najczęściej zmienne PHP widoczne są tylko w pojedynczym zasięgu. Taki zasięg rozciąga się na pliki dołączane funkcjami include() i require(). Na przykład:
Tutaj zmienna $a będzie dostępna także w dołączonym pliku b.inc. Jednakże w funkcjach zdefiniowanych przez użytkownika zmienne mają zasięg lokalny. Każda zmienna użyta wewnątrz funkcji jest domyślnie ograniczona do zasięgu lokalnego, np.
Ten skrypt nie wyświetli niczego, ponieważ instrukcja echo odwołuje się do zmiennej lokalnej $a, której jak dotąd nie została przypisana żadna wartość. Można tu zauważyć różnicę w stosunku do języka C, gdzie zmienne globalne są zawsze dostępne wewnątrz definicji funkcji, o ile nie zostały nadpisane przez lokalną definicję zmiennej. Może to spowodować taki problem, że ktoś może nieodwracalnie zmienić wartość zmiennej globalnej. W PHP zmienne globalne muszą być jawnie określone jako globalne wewnątrz funkcji, w której mają być użyte, do czego używamy słowa kluczowego global. Na przykład:
Powyższy skrypt wyświetli wynik "3". Przez zadeklarowanie wewnątrz funkcji globalności zmiennych $a i $b, wszystkie odwołania do tych zmiennych będą odnosiły się do ich globalnych wersji. Nie ma żadnych ograniczeń w ilości zmiennych globalnych, na których chcemy operować wewnątrz funkcji.
Drugim sposobem uzyskania dostępu do zmiennych globalnych wewnątrz funkcji jest użycie specjalnej, zdefiniowanej przez PHP tablicy $GLOBALS. Powyższy przykład można zatem przepisać tak:
$GLOBALS jest tablicą asocjacyjną, gdzie nazwa zmiennej jest kluczem, a zawartość zmiennej wartością komórki tablicy.
Jeszcze jedną ważną rzeczą, związaną z zasięgiem zmiennych jest zmienna statyczna (ang. static variable). Zmienna statyczna może mieć wyłącznie zasięg lokalny, ale nie traci swojej wartości, kiedy program opuści ten zasięg lokalny, w którym dana zmienna statyczna się znajduje. Proszę rozważyć poniższy przykład:
Ta funkcja jest bezużyteczna, gdyż przy każdym jej wywołaniu zmienna $a otrzymuje wartość 0, w związku z czym funkcja stale wyświetla "0". Występująca potem inkrementacja $a++ nie ma żadnego znaczenia, gdyż funkcja się kończy i zmienna $a znika. Aby powyższa funkcja miała jakiś sens, należy zapobiec gubieniu wartości $a, do czego używamy słowa kluczowego static:
Teraz, za każdym wywołaniem funkcji test, zostanie wyświetlona wartość zmiennej $a, po czym ta zmienna zostanie inkrementowana.
Zmienne statyczne pozwalają też na wykorzystanie funkcji rekurencyjnych, czyli takich, które wywołują same siebie. Funkcje rekurencyjne należy pisać ostrożnie, gdyż łatwo jest wywołać nieskończoną rekurencję. Musisz być pewny, że masz odpowiednie mechanizmy do zatrzymania rekurencji w pewnym momencie. Poniższa funkcja rekurencyjnie liczy do 10, używając zmiennej statycznej $licznik, aby wiedzieć, kiedy ma się zatrzymać: