ALTE DOCUMENTE
|
||||||||
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>)
Ex:
function tva($lei)
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()
Daca dorim sa transmitem un numar mai mare de parametrii catre functie, atunci ii putem delimita cu virgula.
function suma($a,$b)
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)
function calculeaza ($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)
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)
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)
?>
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)
?>
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)
?>
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)
?>
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)
?>
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)
//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)
//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)
//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)
//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()
//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()
//un apel de forma
echo vizitatori();
//va afisa 1
//la urmatorul apel
echo vizitatori();
//se va afisa 2
?>
|