Utilizarea unei functii de Teodor Scaiceanu
Procesul de executare a unei functii se numeste utilizarea, apelarea sau
invocarea functiei. Pentru a folosi o functie, scrieti numele functiei, urmat de
o pereche de paranteze.
De exemplu, functia rand(), care genereazã un numãr intreg aleator, poate fi
apelata astfel:
rand();
Majoritatea functiilor preiau argumente, reprezentand valori, de intrare care
influenteaza operarea si rezultatul functiei. Pentru a specifica argumente,
acestea se insereaza intre paranteze; daca specificati mai mult de un argument,
fiecare argument trebuie separat de vecinul sau prin intermediul unei virgule.
Argumentul unei functii poate fi o valoare literala, o variabila sau o expresie.
Unele functii PHP au argumente optionale, care pot fi specificate sau omise, in
conformitate cu intentiile dumneavoastra.
Cand se produce o eroare in timpul executiei unei functii, PHP genereaza mesaje
de eroare. Uneori, asemenea mesaje de eroare sunt nedorite. In acest caz, puteti
suprima generarea mesajelor de eroare prin prefixarea numelui functiei invocate
cu ajutorul caracterului @. De exemplu,, pentru a suprima mesajele de eroare
care pot aparea in timpul executiei functiei f ( ), invocati aceasta functie
dupa cum urmeaza:
Y = @f(x);
Definirea unei functii
In afara de a utiliza functiile din biblioteca de functii a limbajului PHP, va
puteti defini si folosi propriile functii. Pentru a defini o functie, respectati
modelul urmator:
function nume_functie(nume_argument)
{
// aici se insereaza corpul functiei
}
In cadrul modelului, nume_functie este numele functiei, iar nume_argument
este numele argumentului functiei, in PHP, numele functiilor nu prezinta
sensibilitate la diferenta intre majuscule si minuscule; ca atare, f () si F()
reprezinta referiri la aceeasi functie. Cuvantul cheie function, numele functiei
si lista cu argumente alcatuiesc antetul functiei. Termenul de corp al functiei
se refera la instructiunile incluse intre parantezele acolade care urmeaza dupa
antetul functiei. Instructiunile din corpul functiei sunt executate atunci cand
functia este apelata.
Daca doriti sa definiti o functie care nu are argumente, puteti omite
nume_argument; daca doriti sa definiti o functie cu mai multe argumente, puteti
include argumente suplimentare dupa nume_argument, fiecare argument fiind
separat de vecinul sau prin intermediul unei virgule. Parantezele si numele
argumentelor incluse intre acestea poarta numele de lista cu argumente. Ca
exemplu, iata o functie care calculeaza aria unui dreptunghi:
function calculeaza_arie($inaltime,$latime)
{
return$inaltime * $latime;
}
Lista cu argumente a functiei calculeaza_arie include argumentele $latime si
$inaltime. Corpul functiei este alcatuit dintr-o singura instructiune; cu toate
acestea, corpul unei functii poate contine un numar arbitrar de instructiuni.
Daca doriti ca o functie sa returneze o valoare, trebuie sa determinati functia
sa execute o instructiune return care furnizeaza valoarea respectiva.
Instructiunea return determina sistarea executarii functiei; nu este necesar ca
aceasta sa fie ultima instructiune fizica din corpul functiei. Daca definiti o
functie care nu are nici o instructiune return, functia va returna valoarea
speciala NULL.
Apelarea unei functii definite de utilizator
O functie definita de utilizator poate fi apelata in acelasi mod ca o functie
incorporata. De exemplu, iata o instructiune care apeleaza functia
calculeaza_arie:
$arie = calculeaza_arie(2,4);
Functii recursive
Este posibil ca o functie din PHP sa se auto-apeleze. O functie care procedeaza
astfel se numeste functie recursiva. Totusi, daca nu ati studiat informatica,
este recomandabil sa nu scrieti functii recursive. Cu toate acestea, puteti
scrie accidental o asemenea functie, deci este util sa stiti unele notiuni
referitoare la aceasta.
Programul urmator defineste si invoca o functie recursiva simpla:
function recursor()
{
return recursor();
}
$x = recursor();
La invocarea functiei recursor(), aceasta invoca imediat functia recursor(),
care se auto-invoca instantaneu. Astfel, functia recursor() este invocata in mod
repetat, pana cand se produce o eroare cunoscuta sub numele de depasire in sens
pozitiv a stivei, (stack overflow). Daca programul dumneavoastra se incheie cu o
depasire in sens pozitiv a stivei, o posibila cauza poate consta intr-o recursie
incorecta.
<titlu>Definirea argumentelor prestabilite</titlu>
PHP 4 va permite sa definiti functii cu argumente prestabilite. Daca invocati o
functie care are un argument prestabilit, dar nu furnizati nici o valoare pentru
argumentul respectiv, argumentul ia o valoare prestabilita specificata. Iata un
exemplu simplu:
function impozit_vanzari($cantitae , $rata = 0.0725)
{
echo "<BR>cantitate=$cantitate";
echo "<BR>rata=$rata";
return $suma * $rata;
}
$cumparaturi = 123.45;
echo "<BR>cumparaturi = $cumparaturi";
$impozit = impozit_vanzari($cumparaturi,0.08);
echo "<BR>impozit = $impozit";
$cumparaturi = 123.45;
echo "<BR>cumparaturi = $cumparaturi";
$impozit = impozit_vanzari($cumparaturi);
echo "<BR>impozit = $impozit";
Functia impozit_vanzari preia doua argumente: un argument obligatoriu,
denumit $cantitate, si un argument prestabilit, denumit $rata. Daca apelati
functia si furnizati un singur argument, valoarea argumentului respectiv se
considera ca fiind valoarea argumentului $cantitate, iar valoarea 0.0725 se
foloseste ca valoare a argumentului $rata. Astfel, la prima invocare a functiei,
$rata are valoarea 0.08, specificata drept al doilea argument al functiei.Cu
toate acestea, la a doua invocare a functiei, $rata are valoarea 0.0725 deoarece
este specificata valoarea unui singur argument.
<titlu>Utilizarea variabilelor globale</titlu>
Asa cum s-a explicat anterior, variabilele globale sunt declarate in afara
oricarei functii. Variabilele de formular reprezinta un tip important de
variabile globale. Cu toate acestea, puteti crea o variabila globala
atribuindu-i acesteia o valoare, atata timp cat instructiunea de atribuire
respectiva nu se afla in interiorul corpului unei functii.
Totalitatea locurilor unde este accesibila o variabila se numeste domeniu de
existenta al variabilei. In mod prestabilit, variabilele globale nu pot fi
accesibile din interiorul corpului unei functii; cu alte cuvinte, domeniul de
existenta al unei variabile globale, nu include corpurile functiilor. Daca
doriti sa obtineti accesul la o variabila globala in cadrul unei functii, puteti
extinde domeniul de existenta al variabilei prin specificarea numelui variabilei
in interiorul unei instructiuni global. Instructiunea global are urmatoarea
forma:
Global variabila1, variabila2, variabila3
Dupa cuvantul cheie global pot urma una sau mai multe variabile; fiecare
variabila este separata de vecina sa prin intermediul unei virgule. Iata un
exemplu care prezinta modul de functionare a instructiunii global:
function nu_este_global()
{
echo "<BR>nuglobal: x=$x";
}
function este_global()
{
global $x;
echo "<BR>global: x=$x";
}
$x = 1;
nu_este_global();
este_global;
Daca rulati acest script, veti primi urmatoarele rezultate:
nuglobal: x =
global: x = 1
Retineti ca variabila $x primeste numele unei valori in afara corpului oricareia
dintre functii; cu alte cuvinte, $x este o variabila globala, in consecinta,
variabila $x nu se afla in cadrul domeniului de existenta al functiei
nu_este_global() si, in consecinta, instructiunea echo din cadrul functiei
nu_este_global() nu afiseaza nici o valoare. Cu toate acestea, functia
este_global() contine o instructiune global care extinde domeniul de existenta
al variabilei $x; ca atare, instructiunea echo din cadrul functiei este_global()
afiseaza valoarea variabilei $x.
Utilizarea variabilelor locale si a variabilelor statice
Domeniul de existenta, care descrie unde este disponibila o anumita variabila,
reprezinta o importanta caracteristica a variabilelor. O alta caracteristica
importanta este durata de viata, care descrie cand este disponibila o anumita
variabila.
Variabilele globale sunt create atunci cand li se atribuie o valoare si exista
pe durata unui program. Spre deosebire de acestea, variabilele locale sunt
create la apelarea functiei asociate si sunt distruse la incheierea apelului la
functia respectiva. In consecinta, variabilele locale sunt disponibile numai pe
durata executiei functiei asociate.
Argumentele functiilor constituie un tip important de variabila locala. Cu toate
acestea, puteti crea o variabila locala prin simpla atribuire a unei valori unei
variabile din interiorul unei functii. Pentru a ilustra deosebirea dintre
variabilele locale si cele globale, iata un script care defineste o variabila
locala denumita $x si o variabila globala cu acelasi nume:
function are_local()
{
$x = 2;
echo "<BR>In corpul functiei: x = $x";
}
$x = 1
echo "<BR>In corpul scriptutlui: x = $x";
are_local();
echo "<BR>In corpul scriptului: x = $x";
In cazul in care rulati acest script, veti primi urmatoarele rezultate:
In corpul scriptului: x = 1
In corpul functiei: x = 2
In corpul scriptului: x = 1
Remarcati diferenta dintre cele doua variabile, chiar daca numele
variabilelor este acelasi. Domeniul de existenta al variabilei globale $x nu se
extinde in interiorul corpului functiei are_local(), iar domeniul de existenta
al variabilei locale $x nu se extinde dincolo de corpul functiei respective. Cu
alte cuvinte, domeniile de existenta ale celor doua variabile sunt complet
distincte si, ca atare, PHP nu poate confunda valorile variabilelor respective.
Utilizarea fisierelor incluse
Functiile PHP va permit sa obtineri accesul la programe PHP scrise anterior,
create de dumneavoastra sau de catre un alt programator in limbajul PHP. Un alt
mecanism care va permite sa obtineri accesul la programele scrise anterior il
constituie instructiunea require, care are urmatoarea forma:
require(nume_fisier);
Argumentul nume_fisier are forma unui sir, deci o instructiune require
caracteristica poate avea urmatorul aspect:
require("fisierul.inc");
Cand este incarcat un script PHP care contine o instructiune require,
continutul fisierului specificat - cunoscut sub numele de fisier de includere -
este inserat in script,
inlocuind instructiunea require.
De exemplu, sa presupunem ca scrieti o aplicatie PHP care este alcatuita din mai
multe scripturi, iar fiecare script afiseaza o pagina HTML care contine
informatii standard in partea de sus a paginii. Puteti crea un fisier script
special, denumit antet.inc, care contine urmatoarele linii de program:
<HTML>
<HEAD>
<TITLE>Aplicatia care pune capac la toate aplicatiile</TITLE>
</HEAD>
<BODY>
<H1>Aceasta este aplicatia care incheie toate aplicatiile</H1>
<H5>Copyring 2005, Fane Programatorul si Compania SRL.</H5>
si asa mai departe…
Prin insertia instructiunii
require("antet.inc");
la inceputul fiecarui script, determinati programul PHP sa includa continutul
acelui fisier ca si cum continutul respectiv ar face parte din acel script.
Sus |