PHP korisničke funkcije
Očekivano, kao i jezik C ili JavaScript, i PHP programerima pruža mogućnosti kreiranja funkcijskih potprograma. To je način da se neki deo programa koji se češće izvršava izdvoji u zasebnu celinu koja se onda "poziva" iz glavnog programa.
Svaka funkcija je identifikovana svojim imenom, može imati određene parametre i ima svoje lokalne promenljive. Funkcija se može pozivati iz glavnog programa, iz druge funkcije, pa čak i rekurzivno iz same sebe. Funkcije mogu (i ne moraju) vraćati vrednost.
Deklarisanje funkcije
Funkcija se deklariše ključnom rečju function posle koje se navodi naziv funkcije i lista formalnih parametara u zagradi. "Telo" funkcije (njene naredbe) se navodi unutar vitičastih zagrada.
function naziv(lista formalnih parametara)
{
nardbe
}
Funkcija se poziva po svom imenu, a u zagradi se navodi lista stavrnih parametara (realnih vrednosti koje se prosleđuju funkciji).
naziv(lista stvarnih parametara);
Vrednost funkcije
Funkcija može vratiti neku vrednost kao rezultat. Za ovo se koristi direktiva return, iza koje se navodi vrednost koja se vraća. Ova naredba istovremeno znači i prekid rada ("iskakanje") funkcije.
function naziv(parametri)
{
nardbe
...
return $rezultat;
}
To sve znači da funkcije ne moraju da se pozivaju samo kao zasebne naredbe, već mogu učestvovati i u izrazima.
$prom = fun($a, naziv(123, $x), $b+fff($c));
Parametri funkcije
Kao što već verovatno zante, parametri se dele na formalne i stvarne. Formalni parametri se navode u deklaraciji funkcije i predstavljaju listu promenljivih koje primaju vrednosti stvarnih parametara koji se navode pri pozivu funkcije.
function fun($a, $b, $c) {}
fun(123, $x+25, ff($c));
Formalni parametri se smatraju lokalnim promenljivama, koje imaju vrednost unutar funkcije. U PHP-u se parametri prenose po vrednosti, što znači da se vrednost stvarnih parametara kopira u promenljive koje su navedene kao formalni parametri. Šta god mi radili sa paramterima unutar funkcije, to neće uticati na originalne vrednosti.
Ono što je bitno je da stvarni parametri imaju neku vrednost u trenutku pozivanja. Da li će to da bude konstanta, promenljiva, izraz, poziv funkcije - nije bitno, pošto se vrednosti računaju pre poziva.
Dobra programerska praksa nalaže da se formalni i stvarni parametri moraju poklopiti po broju (koliko zadamo jednih, moramo imati i drugih), tipu (tamo gde se očekuje broj ne možemo proslediti tekst) i značenju (ako se očekuju brojevi koji označavaju mesec i dan, ne možemo zadati dan i mesec).
Zadavanje parametara po referenci
Uobičajeno nije moguće da funkcija može da izmeni vrednost stvarnih parametara, ali ako je potrebno da se to desi, postoji način da se parametri prenesu po referenci, umesto po vrednosti. Tada bi formalni parametri bili samo "pokazivači" ka stvarnim parametrima, i šta god da funkcija uradi sa takvim parametrom, "preneće" se na stvarni paramatar.
Da bi funkcija "znala" koji parametri se prenose po referenci, ispred njih se u deklaraciji funkcije navodi znak & (ampersend).
Da bi ovo funkcionisalo, stvarni parametri koji se prenose po referenci moraju biti promenljive.
Pored korišćenja naredbe return, menjanje vrednosti parametara je još jedan način da funkcija vrati vrednost u glavni program.
Primer
function fun($a, &$b) {
$a = 5; // ne utiče na original
$b = 7; // original se menja
}
$x = 120;
$y = 320;
fun($x, $y); // za prvi parametar nije bitno, ali drugi mora da bude promenljiva
echo $x; // 120 - $x se nije promenio
echo $y; // 7 - $y je promenjen u funkciji
Globalne promenljive
Treći način da funkcija "ubaci" vrednost u neku promenljivu iz glavnog programa, bi bio direktan pristup globalnim promenljivama. Pošto funkcija radi samo sa sopstvenim lokalnim promenljivama, da bismo iz funckije koristili neku promenljivu iz glavnog programa, tu promenljivu moramo da deklarišemo u funkciji kao globalnu, korišćenjem direktive global.
Korišćenjem globalnih promenljivih smanjujemo potrebu za korišćenjem parametara.
Primer
function fun($a) {
global $y;
$y = $a*10; // menjamo promenljivu $y
}
$x = 2;
$y = 3;
fun($x); // zadajemo vrednost 120
echo $y; // 20 - $y je promenjen u funkciji
Varijabilna lista parametara
Funkcije mogu imati i varijabilan broj parametara, kada se parametri, bez obzira koliko ih je, smeštaju u niz kome preistupamo unutr funkcije. Da bi se parametar "proglasio" za listu, koristi se specijalan token ... (tri tačke).
Primer
function fun(...$params) {
$zbir = 0;
foreach ($params as $x) {
$zbir += $x;
}
return $zbir;
}
$r1 = fun(5, 3, 4); // 12
$r2 = fun(2, 6, 2, 10); // 20
- PHP.net, Functions