Despre functii in PHP
In PHP 4 functiile pot fi definite de catre utilizator folosind urmatoarea sintaxa:
function numef ($param1, $param2, ..., $paramN) {
// instructiuni
}
In PHP4 o functie poate fi definita oriunde in cadrul script-ului si in interiorul unei functii poate sa apara orice secventa valida de cod care include definirea de alte functii si definitii de clase. Argumentele unei functii trebuie separate prin virgula, si, implicit, acestea sunt transmise prin valoare. Pentru ca functia sa returneze un rezultat se foloseste constructia return care primeste ca parametru o expresie care reprezinta valoarea functiei. In momentul in care este intalnita constructia return, executia functiei se incheie. In exemplul urmator se calculeaza cu ajutorul unei functii PHP, patratul unui numar.
Exemplu | Rezultat |
<?php function patrat ($n) { return $n * $n; } echo "4^2=<b>".patrat(4)."</b>"; ?> | 4^2=16 |
Transmiterea parametrilor prin referinta
Pentru a transmite parametri unei functii prin referinta, fapt care implica modificarea valorii parametrilor si pastrarea noii valori dupa ce executia functiei s-a incheiat, se foloseste operatorul "&" inaintea numelui parametrului formal, in momentul definirii functiei. Urmatorul exemplu indica modul in care se modifica valoarea unei variabile in interiorul unie functii si modul in care aceasta modificare este resimtita in exteriorul acesteia:
Exemplu | Rezultat |
<?php function modificInt ($s) { $s .= " prima functie."; echo "<b>In modificInt: </b>".$s."<br>"; } function modificExt (&$s) { $s .= " a doua functie."; echo "<b>In modificExt: </b>".$s."<br>"; } $s="Iesire din "; echo "<b>In script: </b>".$s."<br>"; modificInt ($s); echo "<b>In script: </b>".$s."<br>"; modificExt ($s); echo "<b>In script: </b>".$s."<br>"; ?> | In script: Iesire din In modificInt: Iesire din prima functie. In script: Iesire din In modificExt: Iesire din a doua functie. In script: Iesire din a doua functie. |
Nu exista posibilitatea de supraincarcare a unei functii, de redefinire a ei dupa ce aceasta a fost definita in cadrul scriptului respectiv si nu exista nici posibilitatea de anulare a unei functii. O functie poate fi apelata inainte de definirea ei.
Parametri cu valori implicite
In PHP parametrii formali pot avea valori implicite, si, in cazul in care parametrul actual lipseste, atunci se va considera ca are valoarea implicita. Urmatorul exemplu ilustreaza modul de folosire al functiilor cand acestea au parametri formali cu valori implicite:
Exemplu | Rezultat |
<?php function comanda ($s="cafea") { return "Ati comandat ".$s."."; } echo comanda(); echo "<br>"; echo comanda ("suc"); ?> | Ati comandat cafea. Ati comandat suc. |
In cazul in care se folosesc parametri cu valori implicite este necesar ca orice parametru care are o valoare implicita sa se afle in partea dreapta a tuturor parametrilor pentru care nu se folosesc valori implicite, in caz contrar interpretorul PHP nu poate sa decida carui parametru sa-i atribuie valoarea de pe o anumita pozitie din lista de parametri. De exemplu, daca avem o functie a carei declaratie este function transform ($baza=10, $nr) si care returneaza rezultatul transformarii lui $nr din baza 16 in baza $baza, a carei valoare implicita este 10, daca se apeleaza transform (50), interpretorul nu atribuie valoarea 50 parametrului $nr, ci parametrului $baza si genereaza o eroare deoarece lipseste valoarea parametrului $nr.
Functii cu numar variabil de parametri
O alta facilitate a limbajului PHP este aceea ca ofera programatorului posibilitatea de a utiliza functii care au un numar nedeterminat de parametri. Functiile care folosesc un numar variabil de parametri nu au nici o particularitate in ceea ce priveste definirea lor. Aceste functii se definesc la fel ca cele prezentate anterior, dar pentru a putea accesa parametri se vor folosi urmatoarele functii predefinite:
- func_num_args ( ) - aceasta functie returneaza numarul parametrilor functiei care a apelat-o; daca aceasta functie este apelata din exteriorul unei functii definite de utilizator se va genera un mesaj de avertizare;
- func_get_arg (arg_num) - returneaza valoarea parametrului care se afla pe pozitia arg_num in lista de parametri; primul parametru are numarul de ordine 0; daca este apelata din exteriorul unei functii definite de utilizator se va genera un mesaj de avertizare;
- func_get_args ( ) - returneaza un tablou unidimensional care contine valorile parametrilor pe care functia apelanta i-a primit; daca aceasta functie este apelata din exteriorul unei functii definite de utilizator se va genera un mesaj de avertizare. In continuare aveti 2 exemple de utilizare a acestor functii. Primul exemplu afiseaza lista parametrilor functiei folosind functia func_num_args si func_get_arg, iar al doilea exemplu afiseaza aceeasi lista folosind numai functia func_get_args.
Exemplu | Rezultat |
<?php function lista_parametri ( ) { for ($i=0; $i<func_num_args ( ); $i++) { print_r (func_get_arg ($i)); echo "<br>"; } } echo lista_parametri ("Comanda:", 1, "calculator", 2, "procesoare", "configuratie", array ("local", 2, 3)); ?> | Comanda: 1 calculator 2 procesoare configuratie Array ( [0] => local [1] => 2 [2] => 3 ) |
<?php function lista_parametrii ( ) { foreach (func_get_args () as $i) { print_r ($i); echo "<br>"; } } echo lista_parametrii ("Comanda:", 1, "calculator", 2, "procesoare", "configuratie", array ("local", 2, 3)); ?> | Comanda: 1 calculator 2 procesoare configuratie Array ( [0] => local [1] => 2 [2] => 3 ) |
Valorile returnate de functii
Rezultatul obtinut dupa apelarea unei functii poate avea orice tip. O functie poate sa returneze chiar si liste sau obiecte. In PHP exista un caz special de rezultat numit referinta. Pentru ca o functie sa poata returna o referinta, aceasta trebuie declarata folosindu-se operatorul '&' inaintea numelui functiei. Acest operator trebuie sa apara inaintea numelui functiei si in momentul cand o variabila primeste ca valoare referinta rezultata din apelul functiei. In exemplul urmator se defineste o functie al carui rezultat il constituie o referinta:
Exemplu | Rezultat |
<?php function &refer ( ) { global $s; return $s; } $s = "Acesta este continutul variabilei referite cu ajutorul functiei."; $z = &refer ( ); echo $z; ?> | Acesta este continutul variabilei referite cu ajutorul functiei. |
Spre deosebire de majoritatea limbajelor de programare moderne, o functie PHP poate sa returneze o referinta la o variabila care a fost declarata in interiorul functiei, insa acest lucru nu este indicat deoarece, in anumite cazuri, poate duce la efecte neasteptate ale executarii unui script PHP. In alte limbaje de programare efectele devin uneori fatale.
Variabilele de tip functie
O alta facilitate a limbajului PHP in ceea ce priveste functiile este aceea ca suporta variabile de tip functie. Acest lucru este util atunci cand se folosesc liste de functii pentru prelucrarea anumitor tipuri de date. Pentru a atribui un nume de functie unei variabile in PHP se foloseste aceeasi constructie ca in cazul atribuirii unui sir de caractere, si anume, o variabila va primi ca valoare numele functiei scris intre ghilimele simple sau duble. In cazul in care interpretorul PHP gaseste un nume de variabila urmata de o lista de parametri, acesta cauta functia pe care variabila o refera si in cazul in care exista, o executa. Variabilele de tip functie nu functioneaza cu constructii ale limbajului ca echo, unset, isset, empty, include etc. Mai jos aveti un exemplu care ilustreaza modul de lucru cu variabilele de tip functie.
Exemplu | Rezultat |
<?php function produs ($a, $b) { return $a * $b ; } function suma ($a, $b) { return $a + $b; } $operatie = 'produs'; $rez = $operatie (4, 5); echo "4 * 5 = <b>".$rez."</b><br>"; $operatie = 'suma'; $rez = $operatie (4, 5); echo "4 + 5 = <b>".$rez."</b><br>"; ?> | 4 * 5 = 20 4 + 5 = 9 |
Link-ul autorului:
www.tutoriale.far-php.ro
Comentarii
Voteaza acest articol!
Trimite un comentariu!