Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Limbajul PHP. Notiuni generale

php



+ Font mai mare | - Font mai mic



Limbajul PHP. Notiuni generale

1. Inainte de a incepe. Instalare PHP



Pregatirea calculatorului pentru lucrul cu PHP

Inainte ca paginile care contin cod PHP sa poata fi vizualizate, este nevoie sa instalati interpretorul PHP. Acesta actioneaza ca o componenta a serverului web care este invocata de ori cate ori o pagina PHP este intalnita. Aceasta componenta proceseaza pagina si apoi o transmite inapoi la web-server, ajungand in final in browserele utilizatorilor. Acest proces este prezentat in imaginea de mai jos


Deservirea unei pagini statice, fara interventia interpretorului PHP


Deservirea unei pagini dinamice, modificata de PHP in momentul request-ului

Static si dinamic

Din imaginile de mai sus, se observa ca atunci cand nu exista un interpretor PHP, paginile sunt transmise direct catre utilizatori asa cum sunt salvate pe disc, fara modificari. Pentru a actualiza continutul acestora, este nevoie de interventie directa asupra lor si salvarea modificarilor pe server. Aceste pagini sunt denumite 'pagini statice'.

Spre exemplu, presupunand ca avem o pagina statica ce afiseaza membrii unei comunitati, la fiecare inscriere a unei noi persoane, pagina ar trebui modificata manual de catre cineva cu acces la serverul web. Lucrurile se complica daca acea lista este personalizata, cu trimiteri catre alte informatii (cum ar fi detalii de contact pentru fiecare, etc) sau cu un design intortocheat. Toate aceste probleme pot fi rezolvate cu ajutorul PHP.

Folosind o secventa de cod PHP am putea prelua lista de membri dintr-o baza de date, eliminand problema actualizarii - nu va mai fi nevoie sa se modifice pagina odata cu fiecare membru nou, scriptul PHP va afisa in mod automat noile persoane adaugate in baza de date. Este rezolvata si problema linkurilor personalizate, sau a designului - toate elementele specifice unei persoane pot fi generate in mod automat.

Aceste pagini sunt, asadar, modificate de catre PHP la momentul accesarii lor de catre utilizatori. In functie de parametrii primiti si de secventa de cod definita de programator, aceeasi pagina poate avea continut diferit. Aceasta proprietate este denumita dinamism, iar o astfel de pagina este considerata pagina dinamica.

Instalarea interpretorului PHP

Pentru ca fisierele ce contin cod PHP sa poata fi interpretate, devenind astfel dinamice, serverul web trebuie configurat pentru 'comunicarea' cu modulul PHP.

Pentru inceput, cea mai simpla modalitate de a avea totul pregatit pentru a lucra cu PHP este un pachet 'All in one'. Voi descrie pe scurt pasii necesari instalarii programului EasyPHP, o aplicatie care include serverul web Apache, interpretorul PHP, sistemul de gestiune a bazelor de date MySQL si aplicatia de administrare a bazelor de date phpMyAdmin.

Nota: trebuie sa dezinstalati Apache, PHP sau MySQL de pe calculator (daca le aveti deja) inainte de a instala EasyPHP.

  1. Descarcati EasyPHP. Mergeti la https://www.easyphp.org/ -> Download EasyPHP ( sau direct la https://garr.dl.sourceforge.net/sourceforge/quickeasyphp/EasyPHP-3.0-setup.exe )
  2. Instalati EasyPHP (e bine sa se pastreze configurarile implicite).
  3. Porniti programul EasyPHP (de cele mai multe ori va porni automat)
    Nota: la avertizarile de la Windows XP/Vista trebuie sa se aleaga 'Allow' sau 'Unblock' altfel este posibil ca serverul web sa nu functioneze.
  4. In fereastra de EasyPHP apasati F8 (sau Click-Dreapta pe iconita EasyPHP de langa ceas - in Systray - si alegeti Explore). Se va deschide un folder, care reprezinta locatia de unde vor fi luate fisierele cand sunt afisate in browser (de obicei C:Program FilesEasyPHP 3.0www). Nota: in Windows Vista este nevoie sa deschideti manual acest folder (F8 nu pare sa functioneze). Aceasta locatie poarta numele de Document Root si aici trebuie puse toate fisierele .php pe care le scrieti.
  5. Salvati un fisier de test in locatia de mai sus. Dati-i un nume sugestiv, gen test.php. Editati fisierul astfel incat sa contina urmatoarea secventa:
<?php print 'Salut, ai reusit! Iata primul tau script PHP'; ?>
  1. Intr-un browser (Firefox, Internet Explorer, Opera, Safari, etc) mergeti la https://localhost/. Va fi afisata o pagina cu linkuri catre fisierele/folderelor din Document Root care pot fi accesate. Faceti click pe test.php. O alta modalitate de a accesa un fisier este sa mergeti direct la https://localhost/[cale]/[nume].php, de exemplu https://localhost/test.php.
  2. Accesand https://localhost/test.php ar trebui sa fie afisata o pagina alba cu mesajul de mai sus.

Retineti! Toate fisierele PHP pe care le scrieti (inclusiv cele de test preluate de pe acest site) *trebuie* salvate in folderul Document Root (locatia implicita este C:Program FilesEasyPHP 3.0www). Webserver-ul local instalat de EasyPHP va cauta fisierele doar in aceasta locatie. Daca fisierele sunt salvate in alta parte ele nu vor mai putea fi accesate in browser.

De ce imi trebuie un server web?

Instaland EasyPHP, calculatorul personal devine un server web (local, ce-i drept - accesibil doar de catre tine). Practic PC-ul se comporta ca un site ce are adresa https://localhost/ (sau https://127.0.0.1/). Este foarte important ca fisierele PHP sa fie accesate prin intermediul serverului web, deoarece acesta recunoaste scripturile PHP si invoca automat interpretorul PHP. Fara aceasta intermediere oferita de web-server, scripturile PHP nu ar fi procesate ci trimise asa cum sunt la browser.

De exemplu, avem un fisier care contine doar urmatorul cod: (atentie la semnul ! in afara tagurilor)

<?php print 'Salut'; ?> !

Sa presupunem ca fisierul se numeste salut.php.
  -   Daca il accesam in browser folosind adresa 'https://localhost/salut.php' (prin intermediul serverului web local) atunci interpretorul PHP este invocat, scriptul este executat iar rezultatul procesarii afisat de browser va fi 'Salut!'.
  -   Daca accesam fisierul direct de pe disc, scriind in browser calea lui 'file:///C:/Program Files/EasyPHP 3.0/www/salut.php' se va afisa (in cel mai fericit caz) doar '!'. Asta pentru ca interpretorul PHP nu este invocat, iar fisierul este transmis ca atare, cu tagurile de PHP (care sunt ignorate de browser).

2. Ce inseamna PHP?

PHP si programarea server-side

Pe scurt, ce este PHP? Ca idee generala, PHP reprezinta un limbaj ce permite modificarea paginilor web inainte ca acestea sa fie transmise de server catre browserele utilizatorilor. PHP poate insera text intr-ul fisier HTML deja definit, poate defini un fisier HTML de la zero, poate sa afiseze o imagine sau sa redirectioneze utilizatorul catre alta pagina. In cadrul acestui proces, PHP poate consulta baze de date, fisiere externe sau orice alta resursa, poate trimite email-uri sau executa comenzi ale sistemului de operare.

Modul in care PHP modifica/defineste o pagina ce va fi afisata de browser este prin instructiunile scrise de programator si delimitate de etichetele <?php ?>. Astfel, orice se afla intre aceste tag-uri va fi executat de interpretorul PHP si inlocuit cu rezultatul executiei. Ce este in afara lor ramane neschimbat si este transmis catre browser. Spre exemplu, avem o pagina ca mai jos.

<html>
<body>
Azi e <?php print date( 'd.m.Y' ); ?>
</body>
</html>

Rezultatul va fi o pagina HTML ce va contine cuvintele 'Azi e' si rezultatul codului PHP (in cazul acesta - data curenta). Codul HTML final, transmis de server in urma procesarii PHP este urmatorul:

<html>
<body>
Azi e 004.2009
</body>
</html>

Codul PHP nu trebuie sa fie neaparat intercalat in pagina HTML. Secventa de mai jos produce o pagina similara celei de mai sus (in acest caz PHP produce o pagina HTML de la zero).

<?php
print '<html><body>';
print 'Azi e' . date( 'd.m.Y' );
print '</body></html>';
?>

Nota: interpretorul PHP nu este instalat implicit pe orice calculator. Pentru ca toate exemplele de pe site sa functioneze, trebuie sa instalati (manual) un interpretor. Vedeti sectiunea 'Inainte de a incepe' pentru detalii.

Ce afiseaza PHP

Rezultatul unui script PHP este de obicei text simplu care, de cele mai multe ori, este interpretat ca fiind cod HTML. Cu alte cuvinte, in majoritatea cazurilor PHP returneaza o pagina ce va fi afisata in browser. La inceput, acest lucru poate genera confuzii, intrucat sursa HTML este diferita de ceea ce se afiseaza efectiv in browser.

Spre exemplu, fie urmatoarea secventa de cod:

<?php
print 'Salut';
print 'Acesta este un script simplu';
?>

Probabil v-ati astepta ca rezultatul sa fie un text afisat pe 2 linii. Salvand aceasta secventa intr-un fisier PHP si accesandu-l prin intermediul unui web-server, veti observa ca rezultatul este urmatorul:

SalutAcesta este un script simplu

Desi este confuz, rezultatul este corect. Codul PHP afiseaza doar caracterele care i-au fost indicate. Sfarsitul de linie reprezinta un caracter separat, ne-printabil, dar care controleaza cum apare textul pe ecran. In cazul nostru, nu s-a transmis acest caracter (numit si new-line) si prin urmare PHP nu l-a afisat.

Sa rescriem exemplul de mai sus pentru a se afisa si caracterul 'sfarsit de linie'

<?php
print 'Salut';
print 'n'; # se afiseaza caracterul 'new-line' care determina trecerea la un rand nou
# randul nou va fi afisat in textul trimis catre browser
print 'Acesta este un script simplu';
?>

Verificand iar in browser veti constata ca nu s-a schimbat nimic. La prima vedere. In realitate rezultatul este afisat pe 2 linii, in textul trimis de PHP catre browser. Intrucat pagina este interpretata ca fiind HTML, browserul ignora caracterele new-line. Pentru verificare vizualizati sursa paginii (meniul View din browser -> view source).

Pentru a ajunge la efectele dorite (acelea de a afisa un text pe 2 linii) trebuie folosit urmatoarea secventa:

<?php
print 'Salut';
print 'n'; # acum se afiseaza caracterul care determina trecerea la un rand nou
# randul nou va fi afisat in textul primit de browser (vizibil in sursa HTML)
print '<br>' # se afiseaza tagul BR ce va fi interpretat de browser ca 'linie noua'
# linia noua va fi afisata in pagina finala HTML dupa ce este interpretata de
# browser si nu are nici o legatura cu n
print 'Acesta este un script simplu';
?>

Sursa paginii arata in felul urmator:

Salut
<br>Acesta este un script simplu

In browser nu apare tagul BR, intrucat acesta este interpretat ca sfarsit de linie. Caracterul 'new-line' afisat de noi (in print 'n') este ignorat oricum. Rezutatul:

Salut

Acesta este un script simplu

Nota: Este foarte important sa se inteleaga diferenta dintre ceea ce se returneaza in urma executiei unui script PHP si ceea ce se afiseaza propriu-zis in browser. Pe scurt, PHP printeaza cod HTML care este afisat diferit de browsere.

De asemenea, trebuie inteles faptul ca functia print nu afiseaza textul pe mai multe linii daca nu se specifica acest lucru in mod expres. Spre exemplu fie urmatoare secventa de cod:

<?php
print
print
print
?>

Rezultatul va fi


S-a afisat doar ce s-a indicat, 3 caractere, pe o singura linie, fara spatii.

Un alt lucru important de retinut este faptul ca odata printat, un text nu mai poate fi 'sters'. Nu exista 'undo' pentru un print. Se poate captura intregul continut ce se transmite la finalul executiei, dar nu se poate altera textul afisat de o instructiune print anume.

Intelegand aceste aspecte va va fi mai usor in lucrul cu PHP si in modul in care verificati rezultatele scripturilor voastre.

3. Notiuni de baza

Taguri PHP, instructiuni, punct si virgule

Codul PHP trebuie inclus in fisierele ce vor fi deservite utilizatorilor finali si trebuie delimitat de restul continutului prin tagul de inceput <?php si tagul de sfarsit ?>. Practic tot ce se afla in interiorul acestor etichete va fi interpretat ca fiind cod-sursa PHP (cod ce va fi executat de interpretorul PHP). Textul din afara celor 2 taguri este lasat neschimbat, fiind ulterior interpretat de browser. Se pot folosi si alte etichete in functie de configuratia serverului web, dar acestea nu sunt recomandate.

<?php
/* forma recomandata */
?>

<script language='php'>
/* forma disponibila oricand, putin folosita */
</script>

<?
/* taguri scurte, acceptarea lor de catre web-server depinde de configurare */
?>

<%
/* taguri in stilul asp, acceptarea lor de catre web-server depinde de configurare */
%>

Codul PHP este format din instructiuni - comenzi date catre interpretor, in urma carora se executa ceva. Asa cum s-a mai spus, PHP este folosit in principal pentru a genera cod HTML, asa ca de cele mai multe ori instructiunile folosite sunt cele de afisare.

In aplicatii mai complexe se pot insa folosi si instructiuni de conectare la bazele de date, de citire/scriere/manipulare fisiere, intructiuni de trimitere email-uri si altele. Instructiunile se pot grupa in blocuri delimitate de acolade . Aceste blocuri, numite si 'instructiuni complexe' se comporta ca si cum ar fi o singura instructiune (vezi mai jos exemple de blocuri).

Toate instructiunile (in afara de blocuri) trebuie sa fie terminate cu punct si virgula ( ; ). Lipsa acestuia genereaza o eroare.

Intructiuni uzuale - echo, print, printf

In multe din scripturile scrise de incepatori (si nu numai) continutul rezultat in urma executiei este un text (care poate fi sau nu cod HTML). Pentru a obsine acest text, secventele de cod trebuie sa contina instructiuni explicite care sa 'spuna' intrepretorului ce anume trebuie afisat.

Instructiunile de afisare sunt print, echo si printf. Exista si alte modalitati, dar aceste 3 instructiuni sunt cele mai uzuale si usor de folosit. Diferente intre ele exista (vezi https://www.faqts.com/knowledge_base/view.phtml/aid/1/fid/40), dar ca idee generala print si echo fac acelasi lucru si poate fi folosita oricare dintre ele. printf este folosita mai rar datorita sintaxei oarecum greoaie.

<?php
# cele 2 instructiuni de mai jos sunt echivalente
print 'Text';
echo 'Text';

# o instructiune echo poate primi mai multi parametrii
echo 'Afisez', ' un text din ', 4, ' bucati';

# o singura intstructiune print poate primi doar unul
print 'Afisez';
print ' un text din ';
print
print ' bucati';

# printf este folosita pentru a formata continutul, la fel ca in C/C++
printf( 'Am %4.2f lei', 102.1234 ); // afiseaza Am 102.12 lei
?>

Instructiuni de atribuire

Alte instructiuni, la fel de uzuale ca cele de afissare, sunt cele de atribuire. Acestea sunt explicate mai pe larg in sectiunea 'Variabile. Constante'.

Instructiunea if

In afara de aceste 2 categorii, la fel de des intalnita este instructiunea if. Aceasta se numeste instructiunea de test si este folosita pentru a executa o secventa de cod in functie de valoarea de adevar a unei conditii. Exista mai multe forme, prezentate mai jos:

if( conditie ) instructiune 1;

Aceasta forma permite executarea unei instructiuni numai daca este indeplinita o conditie. Conditia poate fi orice expresie de genul '2 < 3', 'variabila $a este definita', s.a. tradusa in limbajul PHP.
Instructiunea poate fi simpla (o singura instructiune) sau un bloc (mai multe instructiuni delimitate de acolade). Regula este ca atunci cand este nevoie sa se execute mai mult de o instructiune, trebuie creat un bloc (trebuie folosite acoladele).
Exemplu:

<?php
if( 2 < 4 ) print '2 e mai mic decat 4';

if( 3 > 1 )
?>

Atentie! Daca nu se foloseste un bloc in cadrul instructiunii if, atunci doar prima instructiune dintre cele existente se executa in urma evaluarii conditiei, pe cand celelalte se vor executa intotdeauna, indiferent de rezultatul verificarii. De exemplu:

<?php
echo 'Este 3 mai mic decat 2? <br />';
if( 3 < 2 )
print '3 < 2';
print '3 este mai mic decat 2';
?>

Codul de mai sus va afisa:

Este 3 mai mic decat 2? <br />
3 este mai mic decat 2

Pentru ca nu am inclus cele 2 instructiuni print intr-un bloc, a doua instructiune s-a executat indiferent de valoarea de adevar a conditiei. Codul corect (din punct de vedere logic) ar fi urmatorul, care contine un bloc de instructiuni:

<?php
echo 'Este 3 mai mic decat 2? <br />';
if( 3 < 2 )
?>

Instructiunea if - else

De multe ori este nevoie sa se specifice o instructiune ce trebuie executata daca nu este indeplinita conditia. In acest caz se foloseste if - else.

if( conditie ) instructiune 1;
else instructiune 2;

Aceasta forma permite executarea unei instructiuni atunci cand se indeplineste conditia sau executarea alteia diferite in caz contrar. Aceleasi observatii ca ti mai sus se aplica.

Siruri de caractere

In majoritatea scripturilor PHP se lucreaza cu bucati de text denumite siruri de caractere sau string-uri. PHP prezinta particularitati in modul in care sunt folosite stringurile, particularitati ce sunt prezentate in exemplele de mai jos.

Nota: sirurile de caractere reprezinta expresii (entitati ce au/returneaza o valoare). Asadar, un string poate fi folosit, pe langa, afisare, in atribuiri, la verificari, etc.

In exemplele ce urmeaza s-a optat pentru afisarea sirurilor.

<?php
print 'Salut, straine!'; // sir simplu
print 'Salut din nou!'; // sir simplu, delimitat de apostrof
?>

Nota: in acest exemplu nu este nicio diferenta intre modul de afisare a sirurilor delimitate prin ghilimele si cele delimitate prin apostrof. Cu toate astea, PHP trateaza in mod diferit aceste caractere. Mai multe explicatii si exemple sunt prezentate in pagina 'Variabile.Constante'.

<?php
print 'Ma numesc 'Alex'!'; // sir ce contine ghilimele, se foloseste '
print 'Porecla ta e Kelu' ?'; // sir delimitat de ghilimele simple ce contine un apostrof

print 'Text afisat pe 3 linii: n linia 2 si n linia3'
// atentie, textul e afisat pe 2 linii in sursa HTML cu ajutorul n

print 'Am castigat $30 :D'; // caracterul dolar are un statut aparte
// pentru a afisa semnul $ asa cum este se foloseste $

print 'Text cu backslash.'; // caracterul (numit escape char) poate fi afisat intr-un
// text daca este dublat; daca e folosit doar un PHP ar trata textul diferit:
print 'Text fara backslash- nu se afiseaza corect.';

print <<<TXT
Text pe mai multe linii.
Delimitatorii pot avea orice nume: TXT, START, etc, cu urmatoarele conditii
- ambii delimitatori trebuie sa aiba acelasi nume
- inainte de primul delimitator se foloseste <<<
- delimitatorul de inceput nu trebuie sa fie urmat de spatiu sau alt caracter
- delimitatorul de final sa fie la inceputul liniei (fara spatii inainte)
- dupa delimitatorul final se pune punct si virgula ;
TXT;

// concatenarea (legarea) sirurilor
print 'Sir1' . ' legat de ' . 'Sir2'; // Sir1 legat de Sir2
?>

Comentarii

Comentariile sunt portiuni de cod care nu se executa. Sunt folosite de programatori de regula pentru a da diverse explicatii despre logica aplicatiei, variabile si altele. Comentariile nu afecteaza executia unui script si pot fi sterse din cod fara niciun efect.

<?php
// acesta este un comentariu. intreaga linie nu va fi luata in considerare
# la fel ca mai sus - print 'hello' - nu se executa
/* comentariu cu delimitator de inceput si sfarsit */

print /* partea asta e ignorata */ 'Salut!';

/* afiseaza
Salut!

?>

Nota: comentariile /* */ nu pot fi imbricate (unele in altele). Exemplul urmator nu este un cod valid.

<?php
/* comentariu /* altul */ inapoi la primul */
?>

Este un lucru foarte util sa folositi comentarii in cod pentru a explica modul de rezolvare a problemei abordate, sau pentru a da detalii despre operatiile efectuate. Acestea va vor ajuta mai tarziu daca veti vrea sa modificati codul scris, sau vor oferi altor persoane informatii (valoroase) despre cum ati gandit codul respectiv.

Terminarea executiei

<?php
exit( 'Script terminat' );
die( 'Script terminat' );

print 'Acesta linie nu se afiseaza niciodata';
?>

Nota: instructunile die si exit sunt echivalente.

4. Functii in PHP

Functii in PHP

Functiile sunt blocuri de cod PHP (secvente de cod) bine delimitate si identificate printr-un nume, ce executa un set de operatii. Functiile pot fi executate de mai multe ori in cadrul unui script prin simpla apelare a numelui lor.

Exista functii predefinite, specifice limbajului PHP (cum ar fi print, empty, etc) ce pot fi folosite in orice moment, fara a fi nevoie de vreo actiune speciala; si exista functii definite de utilizator, scrise practic de programatori. Pentru ca acestea sa poata fi folosite este nevoie sa fie declarate (si implementate).

Exemplu de functie definita de utilizator:

<?php

# functiile se declara folosind cuvantul cheie 'function' urmat de numele functiei
# numele functiei trebuie sa fie orice identificator valid (adica sa inceapa cu
# litere sau cu caracterul _ ) si sa nu contina caractere speciale sau spatiu
# dupa numele functiei se pun paranteze rotunde
# corpul functiei (implementarea) trebuie incadrata in acolade
function afisLuna()
</option>n

echo '</select>'


# mai jos vom folosi functia pentru a afisa un drop-down cu lunile anului:
echo 'Luna inceperii activitatii: '
afisLuna();

echo '<br /><br />Luna terminarii activitatii: '
afisLuna();

?>

Rezultatul codului PHP este reprezentat mai jos:

Luna inceperii activitatii:

Luna terminarii activitatii:

Am scris, asadar, o singura data codul care afiseaza lunile anului si l-am apelat de cate ori am avut nevoie. Apelarea functiei se face prin specificarea numelui urmat de paranteze. Intre paranteze se pot specifica parametrii, dupa cum vom vedea mai jos. Alternativ, o functie definita de utilizator se poate apela folosind instructiunea call_user_func

# vom rescrie ultima parte a codului
echo 'Luna inceperii activitatii: '
call_user_func 'afisLuna'

echo '<br /><br />Luna terminarii activitatii: '
call_user_func 'afisLuna'

Instructiunea call_user_func este utila atunci cand numele functiei este furnizat de o variabila, cu ajutorul careia se poate apela dinamic o functie. Exemplu:

<?php

# definesc 2 functii diferite
function unu()

function alta()

# declar o variabila care sa aiba ca valoare numele functiei
$functie 'unu'


# variabile $functie poate sa se schimbe in functie de diferite conditii
# in cazul nostru, daca ziua curenta e prima zi din luna, valoarea va fi 'unu'
if date 'd' $functie 'unu'
else $functie 'alta'

# la final apelez dinamic functia data de variabila
# codul nu stie exact care functie va fi - el doar executa ce-i transmite variabila

# eventual pot face niste validari:
- function_exists verifica daca functia transmisa a fost definita

- is_callable verifica daca variabila transmisa poate fi apelata ca functie

if function_exists $functie && is_callable $functie else
// Rezultat (live): Azi e o zi obisnuita?>

Foarte important de stiut este faptul ca variabilele definite in afara functiilor nu sunt disponibile in interiorul lor. Astfel, codul de mai jos nu va functiona asa cum ne asteptam:

<?php

# declar o variabila
$a 'Afara e frumos'

# definesc o functie
function afisMesaj()

# apelez functia
afisMesaj // nu va afisa nimic!!

?>

Functia nu va afisa mesajul, asa cum v-ati fi gandit la prima vedere. Asta pentru ca ce este definit in afara functiei nu este recunoscut in interior. In mod similar, variabilele definite in interiorul unei functii se pierd si NU sunt disponibile in afara acesteia.

Exista totusi o modalitate prin care variabilele definite in afara unei functii sa fie 'aduse' in interiorul ei: folosind intructiunea global.

<?php

# declar o variabila
$a 'Afara e frumos'

# definesc o functie
function afisMesaj()

# apelez functia
afisMesaj // va afisa Afara e frumos

?>

Daca e nevoie sa se foloseasca mai multe variabile globale in cadrul unei functii, acestea se pot specifica toate intr-o singura instructiune global:

global $a $b $Vector

De ce sunt folosite functiile?

Printre avantajele folosirii functiilor, se numara:

  • reutilizarea codului
    Spre exemplu, daca este nevoie sa se execute aceeasi secventa de cod in mai multe parti ale unui program sau script, pentru a nu se rescrie codul de fiecare data, se defineste o functie care este apelata de mai multe ori, asa cum am facut in primul exemplu de mai sus
  • modularizare
    Odata cu aparitia functiilor (a subprogramelor, in general) s-a introdus si conceptul de modularizare care presupune impartirea (spargerea) problemei ce trebuie rezolvata in probleme mai mici. Fiecare problema mai mica reprezinta un subprogram, implementat intr-o functie care contribuie la rezultatul final.
    Spre exemplu, avem o operatie (relativ) complexa: afisarea inbox-ului unui utilizator. Aceasta problema poate fi impartita in parti mai mici/simple. Pentru fiecare parte s-ar defini cate o functie in loc sa se scrie un singur script foarte mare, iar la final codul va arata cam in felul urmator:
preluareDateAutentificare();
verificareDate();
preluareMesajeInbox();
afisareInbox
  • mentinerea usoara a codului si intelegerea mai usoara a logicii aplicatiei sau a scriptului
    Acestea sunt urmari imediate ale primelor 2 puncte. Daca scriptul este structurat, impartit in bucati mai mici, in care aceleasi secvente de cod nu se repeta atunci va fi mai usor si de inteles si de modificat sau intretinut.

Valori returnate. Parametrii

De multe ori este nevoie ca o functie sa returneze o valoare. Majoritatea functiilor predefinite fac lucrul acesta; spre exemplu empty returneaza TRUE sau FALSE in functie de starea si continutul unei variabile transmise ca parametru.

Si functiile definite de utilizator pot returna o valoare, cu ajutorul instructiunii return. Exemplu:

<?php

function formatareData()

# rezultatul returnat de functie poate fi folosit in diferite moduri:
$azi formatareData // atribuirea rezultatului

print formatareData // afisarea rezultatului
formatareData // rezultatul nu este folosit - daca functia nu printeaza ceva
// atunci apelul nu are nici un efect vizibil

?>

De asemenea, functtile pot primi date ce pot fi folosite in interiorul lor pentru diverse prelucrari. Aceste date de intrare sunt transmise sub forma de parametrii.

Pentru ca o functie sa poata primi parametrii, acestia trebuie sa ii declari intre parantezele rounde, ca in exemplul de mai jos

<?php

# functia este declarata sa primeasca 2 parametrii ce vor fi prelucrati
# functia returneaza si o valoare, in functie de datele de intrare
function minim $a $b

# la apelul functiei, este obligatoriu sa se transmita 2 parametrii
# parametrii pot fi orice expresie (variabile, constante, rezultatul altor functii, etc)

print minim( // parametrii sunt 2 valori numerice

$x $y
print minim( $x $y // parametrii sunt 2 variabile

$x $a $b
print minim( $x minim $a $b // parametrii primului apel sunt: variabila $x
// si rezultatul unui alt apel cu 2 parametrii diferiti

?>

Nota: intrucat functia minim() returneaza o valoare, ea poate fi folosita ca si cum ar fi un numar normal. De aceea apelul de mai sus este valid. Alte exemple valide sunt mai jos:

<?php

$a minim

if minim $a >
else


?>

O facilitate avansata oferita de limbajul PHP este folosirea valorilor predefinite pentru parametrii functiilor. Aceasta permite ca o functie sa nu fie apelata cu toti parametrii ei, urmand ca pentru valorile care lipsesc sa fie folosite valorile predefinite. Functia minim() definita mai sus poate fi rescrisa in felul urmator:

<?php

function minim $a $b

?>

Declararea functiei de mai sus se traduce in felul urmator: daca functia minim() nu este apelata cu toti parametrii, atunci foloseste valoarea 1 pt $a si valoarea 2 pt $b in calculele din interiorul functiei. In acest caz, functia se poate apela in felul urmator:

<?php

echo minim // echivalent cu echo minim(1,2);
echo minim( // echivalent cu echo minim(7,2);
echo minim( // apel normal cu toti parametrii

?>

Facilitati avansate referitoare la functii

Pe langa functionalitatile standard, explicate mai sus, limbajul PHP dispune de alte caracteristici mai avansate. Astfel, pot fi definite functii ce pot primi oricati parametrii este nevoie, pot fi apelate functii la un interval de timp, pot fi executate functii de fiecare data la terminarea executiei unui script PHP, etc.

Acestea nu sunt insa lucruri folosite de zi cu zi, asa ca prezentarea lor depaseste scopul acestui site. Nu trebuie sa le invatati acum, ci doar sa stiti ca exista.

Mai jos amintite sunt cateva din functiile avansate ce pot fi folosite:

  • call_user_func - alternativa pentru apelul simplu al unei functii definite de utilizator . numele functiei de apelat poate fi stocat intr-o variabila, putand astfel apela functii diferite in situatii diferite
  • call_user_func_array - la fel ca mai sus, doar ca este folosita atunci cand functia ce trebuie apelata are mai mult de un parametru
  • function_exists - folosita pentru a verifica daca o functie este definita
  • create_function - folosita pentru a defini o functie 'on the fly', atunci cand codul PHP se executa
  • register_shutdown_function - folosita pentru a specifica o functie care sa se execute la finalul executiei codului PHP
  • func_num_args, func_get_args, func_get_arg - functii ajutatoare folosite in cazul functiilor apelate cu un numar variabil de parametrii


Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1856
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved