Sunteți pe pagina 1din 7

FUNCTII IN PHP

Functiile sunt portiuni de cod definite pentru a executa anumite sarcini. Functiile pot fi chemate de mai multe ori pe parcursul executiei unui program. Ele primesc argumente (valori de intrare) cu ajutorul carora executa cateva operatii dupa care returneaza o valoare. Functiile transfera orice valoare primita ca argument in variabile temporare numite parametrii ce pot fi folositi numai pe parcursul executiei functiei. Definire : function <nume_functie> (<parametrii>){ //cod //cod } Ex: function tva($lei){ $total=$lei*1.19; return $total; } O apelare de forma : echo tva(100000); va produce rezultatul 119000. Pentru returnarea unei valori am folosit cuvantul cheie return. Functia poate fi apelata si fara argumente : function tva(){ echo Valoarea tva este de 19%; } Daca dorim sa transmitem un numar mai mare de parametrii catre functie, atunci ii putem delimita cu virgula. function suma($a,$b){ $suma=$a+$b; return $suma; } O apelare de forma : echo suma(5,10); va produce inevitabil rezultatul 15.

Exemplu practic (functii si switch): <? $valuta=euro; $suma=500; $curseuro=39890; $cursusd=32800; switch ($valuta){ case euro: echo calculeaza($suma,$curseuro); break; case usd: echo calculeaza($suma,$cursusd); break; default: echo Nu ati introdus corect valuta; } function calculeaza ($suma,$curs){ return $suma*$curs; } ?> Putem observa cu usurinta cum am folosit functia de doua ori, adaptand valorile de intrare dupa caz (euro sau usd). Trimiterea variabilelor prin valoare :

<? $a=5;$b=10; suma($a,$b); function suma($a,$b){ $a+=$b; echo Valoarea lui a in cadrul functiei .$a.<br>; } echo Valoarea lui a dupa rularea functiei .$a; ?> Putem observa ca a ia pe rand valoarea 5 (in programul principal), ulterior se transmite functiei, care copiaza pe o stiva valoarea lui a dupa care in incrementeaza cu valoarea lui b (si ea copiata intr-o variabila temporara). La iesirea din functie, a si b din interiorul functiei se distrug, inafara ei variabilele a si b ramanand nemodificate. Prin urmare, pe ecran vor fi afisate urmatoarele: Valoarea lui a in cadrul functiei 15 Valoarea lui a dupa rularea functiei 5

prin referinta

A doua metoda de a trimite variabile unei functii este prin referinta, mod ce permite functiei sa modifice valoarea unei variabile, inclusiv inafara functiei. Pentru a indica trimiterea prin referinta, se adauga in fata variabilei un ampersand. <? $a=5;$b=10; suma($a,$b); function suma(&$a,$b){ $a+=$b; echo Valoarea lui a in cadrul functiei .$a.<br>; } echo Valoarea lui a dupa rularea functiei .$a; ?> Vor fi afisate urmatoarele : Valoarea lui a in cadrul functiei 15 Valoarea lui a dupa rularea functiei 15 Stabilirea valorilor implicite Sunt situatii cand unul sau mai multi parametrii nu primesc intializarea cu argumente. Ex: <? $a=5;$b=10; suma($a); function suma($a,$b){ $a+=$b; echo Valoarea lui a in cadrul functiei .$a.<br>; } ?> Va produce ca rezultat : Valoarea lui a in cadrul functiei 5 Daca totusi dorim ca un parametru sa ia anumita valoare chiar daca nu este primit in functie ca argument, folosim descrierea functiei dupa cum urmeaza: <? $a=5;$b=15; suma($a); function suma($a,$b=10){ $a+=$b; echo Valoarea lui a in cadrul functiei .$a.<br>; } ?> Rezultatul va fi : Valoarea lui a in cadrul functiei 15 O apelare de forma : suma($a,$b) va produce in programul de mai sus rezultatul : Valoarea lui a in cadrul functiei 20.

Ordinea initializarii parametrilor in functii este de la stanga la dreapta, deci trebuie sa punem intai parametrii ce ii trimitem ca argumente la apelarea functiei, dupa care, la final parametrii cu valoare implicita. Un astfel de program : <? $a=5;$b=15; suma(,$b); function suma($a=5,$b){ $a+=$b; echo Valoarea lui a in cadrul functiei .$a.<br>; } ?> desi are setat parametrul a cu valoare implicita, va genera o eroare. Solutia este inversarea ordinii, lasand parametrii optionali la sfarsit. In functie de versiunea de PHP pe care rulati puteti face o apelare a functiei cu mai putine argumente decat definitia, chiar daca nu sunt asignate valori implicite parametrilor. Ex : <? $a=5;$b=15; suma($a); function suma($a,$b){ $a+=$b; echo Valoarea lui a in cadrul functiei .$a.<br>; } ?> va returna Valoarea lui a in cadrul functiei 5 cu cel mult un mesaj de atentionare (warning).

Un minus al trimiterii parametrilor prin referinta este urmatorul : <? suma(5,10); function suma(&$a,$b){ $a+=$b; echo Valoarea lui a in cadrul functiei .$a.<br>; } ?> Aparent programul nu prezinta nici o eroare. Totusi, la o examinare mai atenta se poate vedea ca parametrul a este initializat prin referinta fata de un intreg (nu o variabila). Prin urmare modificarea lui a ar echivala cu modificarea intregului 5, nu al continutului unei variabile (similar cu 5=5+10). Programul va prezenta eroarea Only variables can be passed by reference.

Locul variabilelor in program Variabilele din interiorul functiilor nu se pot vedea in exteriorul lor (se distrug la terminarea functiei) decat daca sunt transmise ca referinta. Variabilele pot fi : - globale - locale Variabilele globale sunt variabilele ce isi mentin existenta pe parcursul executiei intregului program, in timp ce variabilele locale sunt variabilele din interiorul functiilor ce isi inceteaza existenta dupa terminarea functiei. Ex : <? $salariu=800; $taxe=0.25; calculeaza($salariu,$taxe); function calculeaza ($salariu,$taxe){ $salariu_net=$salariu*(1-$taxe); //salariu_net este o variabila locala functiei echo Salariul net este : .$salariu_net; //se va afisa Salariul net este : 600 } //daca in schimb afisam in exterior echo Salariul net este : .$salariu_net; //se va afisa doar string ul Salariul net este : ?> Ex 2: <? $salariu=800; $taxe=0.25; calculeaza($salariu,$taxe); function calculeaza ($salariu,$taxe){ $salariu*=(1-$taxe); //salariu este o variabila locala functiei echo Salariul net este : .$salariu; //se va afisa Salariul net este : 600 } //daca in schimb afisam in exterior echo Salariul net este : .$salariu; //se va afisa Salariul net este : 800 ?>

Daca dorim o vizualizare globala a variabilelor locale functiei avem 2 posibilitati : - le trimitem ca referinta - le asociem parametrul global inainte de a opera cu variabilele sau folosind vectorul $GLOBALS[] Ex 3: <? $salariu=800; $taxe=0.25; calculeaza($taxe); function calculeaza ($taxe){ global $salariu; $salariu*=(1-$taxe); //salariu este o variabila globala echo Salariul net este : .$salariu; //se va afisa Salariul net este : 600 } //daca afisam in exterior echo Salariul net este : .$salariu; //se va afisa Salariul net este : 600 //pentru ca $salariu este tratata ca o variabila globala ?> Similar se poate folosi vectorul $GLOBALS[]; Ex 4: <? $salariu=800; $taxe=0.25; calculeaza($taxe); function calculeaza ($taxe){ $GLOBALS[salariu]*=(1-$taxe); //salariu este o variabila globala echo Salariul net este : .$GLOBALS[salariu]; //se va afisa Salariul net este : 600 } //daca afisam in exterior echo Salariul net este : .$salariu; //se va afisa Salariul net este : 600 //pentru ca $salariu este tratata ca o variabila globala ?>

Variabilele statice sunt folosite atunci cand este necesar ca acestea sa existe pe parcursul mai multor apelari ale functiilor, fara a mai fi necesara o reatribuire. Ex 1: <? function vizitatori(){ return ++$vizitatori; } //un apel de forma echo vizitatori(); //va afisa 1 //la urmatorul apel echo vizitatori(); //se va afisa tot 1 ?> Este destul ne neplacut ca pe parcursul unei numaratori sa aveti variabile ce se reseteaza la fiecare apelare a functiei. Pentru a asigura persistenta variabilei, se foloseste cuvantul cheie static. Ex 2: <? function vizitatori(){ static $vizitatori; return ++$vizitatori; } //un apel de forma echo vizitatori(); //va afisa 1 //la urmatorul apel echo vizitatori(); //se va afisa 2 ?>