tehnologii web

Documente similare
Programarea şi utilizarea calculatoarelor

proiectarea bazelor de date

Operatorii in C Expresii Operatori aritmetici Operatori de asignare Operatori de incrementare si decrementare Operatori relationali Operatori logici O

Microsoft Word - CarteC.doc

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

SUBPROGRAME

E_d_Informatica_sp_SN_2014_bar_10_LRO

Paradigme de programare

E_d_Informatica_sp_MI_2015_bar_02_LRO

Top

Microsoft Word _POO_Lab_1_Modificari_v01.htm

Microsoft Word - CarteC.doc

Laborator 2: Instrucţiuni Java şi lucru cu şiruri de caractere Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 18 octombrie 2011

Paradigme de Programare

Lecţia 2 Structura liniară, alternativă şi repetitivă Clasa a V-a Structuri de bază(liniară, alternativă şi repetitivă) Programarea structurată este o

Microsoft Word - CarteC.doc

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

-

PPSD

LUCRAREA 8 PROGRAMAREA NELINIARĂ ÎN REZOLVAREA PROBLEMELOR DIN ENERGETICĂ. METODE DE ORDINUL Aspecte generale Programarea neliniară are o foart

Laborator 4: Continuare Programare Orientată pe Obiecte Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 29 octombrie 2011

Logică și structuri discrete Limbaje regulate și automate Marius Minea marius/curs/lsd/ 24 noiembrie 2014

Utilizare Internet

Slide 1

Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode]

Programarea şi utilizarea calculatoarelor

PROGRAMARE ORIENTATA PE OBIECTE

Testare manuala: situatia in care o persoana initiaza fiecare test, interactioneaza cu el si interpreteaza, analizeaza si raporteaza rezultatele. Test

Slide 1

MergedFile

PowerPoint-Präsentation

Laborator 3

ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine număru

GHERCĂ MAGDA CASA CORPULUI DIDACTIC BRĂILA PORTOFOLIU EVALUARE INFORMATICĂ ȘI TIC PENTRU GIMNAZIU CLASA A V-A Neamț SERIA 1 GRUPA 1 CURSANT: GHERCĂ G

1. Operatii cu matrici 1 Cerinte: Sa se realizeze functii pentru operatii cu matrici patratice (de dimensiune maxima 10x10). Operatiile cerute sunt: A

Declararea variabilelor

Diapositive 1

L7

Programarea calculatoarelor. Note de curs Marius Minea 1 Introducere în programarea în C 1.1 Funcţii în limbajul C Calcule şi funcţii La origine, rolu

Subiectul 1

Analiză de flux de date 29 octombrie 2012

Proiectarea Sistemelor Software Complexe

PHP (II)

Curs 8: Tehnica divizării (I) Algoritmi si structuri de date - Curs 8 1

Declaraţii. Instrucţiuni 19 octombrie 2005 Programarea calculatoarelor 2. Curs 3b Marius Minea

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Ingineria Sistemelor de Programare

MINISTERUL EDUCAŢIEI, CULTURII ŞI CERCETĂRII AL REPUBLICII MOLDOVA UNIVERSITATEA DE STAT ALECU RUSSO DIN BĂLŢI FACULTATEA DE ŞTIINŢE REALE, ECONOMICE

Laborator 9: Fire de execuţie Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 20 noiembrie 2011

Limbaje de programare Pointeri. Alocare dinamică (continuare) 26 noiembrie 2012

Lab6LCD

Limbaje de Programare Curs 6 – Functii de intrare-iesire

Microsoft Word - PCLP2_Curs_4_2019.doc

Slide 1

B

Modul Modbus ASCII SISTEME DE COMUNICATIE CURS 5 - Constantinescu Catalin Atunci cand se foloseste modul MODBUS ASCII fiecare octet din mesaj

Microsoft Word - 2 ES RO.doc

Slide 1

Aggregating Data

Adresarea memoriei Modurile de adresare constituie un instrument principal pentru reprezentarea în memorie a imaginii datelor, aşa cum este ace

Analiză statică Analiza fluxului de date 23 octombrie 2014

PROGRAMARE OBIECT-ORIENTATA LABORATOR 1 INTRODUCERE IN CLASE SI OBIECTE Introducere teoretica Prin intermediul unei Clase ne dorim sa construim tipuri

Interfețe și Protocoale de Comunicații Arduino-Port Paralel Arduino. Laborator 1- Portul Paralel 1 Caracteristici generale Arduino UNO este o placă de

Tablouri (continuare)

Logică și structuri discrete Relații. Funcții parțiale Marius Minea marius/curs/lsd/ 20 octombrie 2014

O NOUA PROBLEMA DE CONCURS OLIMPIADA MUNICIPALA DE INFORMATICA, IASI 2019 V-am promis într-un articol mai vechi ca vom prezenta pe acest blog câteva p

Introducere în limbajul JavaScript

Информационная система персонализации, печати и учета документов об образовании

Tablouri unidimensionale Problema 1 Să se determine mulţimea cifrelor unui număr natural n > 0, dat. Exemplu: n= Cifre = {1,2,3,7} Se cere să s

Microsoft Word - Curs_07.doc

Microsoft Word - Curs 11 - PHP.doc

Probleme proiect TP BITPERM Implementați un algoritm care citește de la intrarea standard două numere naturale și scrie la ieșirea standard da

Laborator 8: PROIECTAREA BAZELOR DE DATE SUBPROGRAME in PL/SQL (partea II - functii) Un subprogram este un bloc PL/SQL cu nume (spre deosebire de bloc

Propunator: Morar Florin Colegiul National Silvania Zalau Discipina: Informatica Nivel liceal, cls. XII 1.Să se scrie în limbajul C/C++ definiţia comp

Lucrarea 10

Fâciu N. Maria-Ema CASA CORPULUI DIDACTIC BRĂILA PROGRAM DE FORMARE INFORMATICĂ ȘI TIC PENTRU GIMNAZIU CLASA A V-A SERIA 1 GRUPA 2 CURSANT: Fâciu N. M

Microsoft Word - lab4.doc

LOGICA MATEMATICA SI COMPUTATIONALA Sem. I,

Matrici și vectori în VBA În VBA, o matrice este un grup de variabile de același tip. De ce ar trebui să utilizați o matrice? Presupunem că ați vrut s

ALGORITHMICS

Limbaje de Programare Curs 8 – Fisiere

Microsoft PowerPoint - Curs_SDA_4_RO_2019_v2.pptx

Microsoft Word - Curs_09.doc

Laborator5_SQL_an2

Curs 3 Permutari cu repetitie. Combinari. Algoritmi de ordonare si generare

Logică și structuri discrete Logică propozițională Marius Minea marius/curs/lsd/ 3 noiembrie 2014

Cuantizare Vectoriala.doc

Anexa nr. 2 FIŞA DISCIPLINEI 1. Date despre program 1.1 Instituţia de învăţământ superior UNIVERSITATEA DE VEST TIMISOARA 1.2 Facultatea FIZICA 1.3 De

Laborator 2 - Încapsularea Programare Orientată pe Obiecte Tema 2.1 Să se analizeze programul EX2.C Indicatii 2.1 A nu se uita de fisierul EX2.H Tema

Slide 1

Microsoft Word - Laborator 6 - Expresii Regulate IV.doc

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

Ruby on Rails Pop Alexandru Pavel Razvan Calculatoare 4

I. Partea introductivă Proiectul unității de învățare CONCEPTUL DE MATRICE ŞCOALA: Colegiul Național Petru Rareș Suceava CLASA: a XI a- matematică / a

REGULAMENTUL OFICIAL AL CAMPANIEI PROMOTIONALE BEDROOM CE SA VA DESFASURA IN PERIOADA SECŢIUNEA 1. ORGANIZATOR Organizatorul cam

CASA CORPULUI DIDACTIC BRAILA PROGRAM DE FORMARE INFORMATICA SI TIC PENTRU GIMNAZIU CLASA A V-A SERIA 1 GRUPA 2 CURSANT: TIMOFTI V. AFRODITA COLEGIUL

PCLPII-C16(9)

Transcriere:

Universitatea Constantin Brâncuşi din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie şi Mediu Tehnologii Web Lector univ. dr. Adrian Runceanu 1

Curs 7 Limbajul PHP (partea II) 2

Curs 7 1. Instrucţiuni conditionale 1.1. Instrucţiunea if 1.2. Instrucţiunea switch 1.3. Instrucţiuni pentru controlul execuţiei iteraţiilor 2. Instrucţiuni repetitive 2.1. Instrucţiunea while 2.2. Instrucţiunea do while 2.3. Instrucţiunea for 3

Curs 7 3. Funcţii 3.1. Apelarea funcţiilor 3.2. Funcţii definite de utilizator 3.2.1. Definirea funcţiilor 3.2.2. Variabile automatice 3.2.3. Funcţii care întorc valori 3.2.4. Accesul la variabile declarate în exterior. Variabile globale 3.2.5. Funcţii recursive 3.2.6. Terminarea execuţiei unui script 4

1. Instrucţiuni(I) Ştim că orice program se poate scrie utilizand numai trei tipuri de structuri de control: 1. secventiala (sau liniara) 2. alternativa 3. repetitiva conditionata anterior Pe langa cele trei amintite, oricare limbaj de nivel inalt implementeaza si alte structuri de control, introduse in scopul cresterii eficientei activitatii de programare. 5

1. Instrucţiuni(II) Structurile enumerate (cu exceptia celei secventiale) pot fi grupate in urmatoarele doua categorii: 1. structuri de control conditional controleaza fluxul programului, executand sau nu anumite portiuni de cod, in functie de indeplinirea sau neindeplinirea unor conditii 2. structuri de control repetitive - executa anumite portiuni de cod de un numar determinat de ori 6

1. Instrucţiuni condiţionale Structurile de control conditional sunt implementate in limbajul PHP prin intermediul instructiunilor: 1. if 2. switch care permit ramnificarea executiei scriptului pe diverse cai, in functie de deciziile luate in timpul executiei acestuia. 7

Curs 7 1. Instrucţiuni conditionale 1.1 Instrucţiunea if 1.2. Instrucţiunea switch 1.3. Instrucţiuni pentru controlul execuţiei iteraţiilor 2. Instrucţiuni repetitive 2.1. Instrucţiunea while 2.2. Instrucţiunea do while 2.3. Instrucţiunea for 8

1.1. Instructiunea if Cea mai des utilizata instructiune conditionala este if. Instructiunea if are urmatoarea sintaxa: if (expresie) { grup de instructiuni } Expresia expresie este evaluata la o valoare logica. Daca aceasta este true va fi executata secventa de cod grup, care include una sau mai multe instructiuni. Daca sunt cel putin doua instructiuni, grupul trebuie inclus obligatoriu intre acolade, in caz contrar fiind executata numai prima instructiune. 9

Observatie: In mod obisnuit, sunt folosite acoladele chiar daca grupul contine numai o singura instructiune. Exemplu: if ($varsta>99 && $varsta<18) { echo "Nu puteti accesa aceasta sectiune a site-ului!"; } 10

Instructiunea if...else are urmatoarea sintaxa: if (expresie) { grup1 } else { grup2 } Daca valoarea logica a expresiei expresie - evaluata de interpretorul PHP este true, va fi executat grupul de instructiuni grup1, in caz contrar fiind executat grup2. 11

Exemplu: Daca o valoare este in intervalul [1, 2], se transmite catre browser valoarea (x+1)/2, altfel se transmite valoarea (x-1)/2: <?php if($x>=1 && $x<=2) $v=($x+1)/2; else $v=($x-1)/2; echo ($v);?> 12

Instructiunea asociata unei instructiuni if sau else poate fi ea însasi o instructiune if. O asemenea instructiune if se numeste "instructiune if imbricata". 13

Exemplu de instructiune if imbricata: <?php if ($numar > 10) if ($numar > 100) echo "Acesta este un numar mai mare decat 100"; else echo "Acesta este un numar mai mic decat 100, dar mai mare decat 10"; else echo "Acesta este un numar mic";?> 14

O instructiune corelata atât cu instructiunea if, cât si cu instructiunea else, este instructiunea elseif. Când este folosita corect, poate fi mai simplu de înteles decât o instructiune if imbricata, logic echivalenta cu aceasta. 15

Exemplu de instructiune elseif: <?php if ($numar > 100 ) echo "Acesta este un numar mai mare decat 100 ; elseif ($numar > 10) echo "Acesta este un numar mai mic decat 100, dar mai mare decat 10 ; elseif ($numar > 1) echo "Acesta este un numar mic ; else echo "Acesta este un numar foarte mic ;?> 16

Curs 7 1. Instrucţiuni conditionale 1.1. Instrucţiunea if 1.2. Instrucţiunea switch 1.3. Instrucţiuni pentru controlul execuţiei iteraţiilor 2. Instrucţiuni repetitive 2.1. Instrucţiunea while 2.2. Instrucţiunea do while 2.3. Instrucţiunea for 17

1.2. Instructiunea switch A doua instructiune conditionala este switch, avand urmatoarea sintaxa: switch (expresie){ } case expresie 1 : grup 1 ; break; case expresie 2 : grup 2 ; break;..... [default: grup;] Expresia expresie este comparata cu expresie 1, expresie 2,. 18

Daca se gaseste o potrivire pentru comparatie, se utilizeaza operatorul de egalitate == (expresie k ), va fi executata secventa de cod corespunzatoare (adica grup k ), ignorand eventualele linii case ramase. Grupul de instructiuni grup, asociat cazului default, este executat numai daca, anterior, nu s-a gasit nici o potrivire. 19

Exemplu: Daca valoarea transmisa pentru x este 1,2,3,4, atunci valoarea respectiva este retransmisa catre utilizator alfabetic, altfel, se va transmite un mesaj oarecare: 20 <?php switch($x) { case (1): echo( unu ); break; case (2): echo( doi ); break; case (3): echo( trei ); break; case (4): echo( patru ); break; default : echo ( Nu este 1, 2, 3 sau 4 ); }?>

Curs 7 1. Instrucţiuni conditionale 1.1. Instrucţiunea if 1.2. Instrucţiunea switch 1.3. Instrucţiuni pentru controlul execuţiei iteraţiilor 2. Instrucţiuni repetitive 2.1. Instrucţiunea while 2.2. Instrucţiunea do while 2.3. Instrucţiunea for 21

1.3. Instructiuni pentru controlul executiei iteratiilor Impreuna cu instructiunile repetitive sunt utilizate instructiunile break si continue, avand rolul de a introduce elemente de control suplimentare in executia acestora. Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu aceasta, a instructiunii in care este utilizata. 22

In cazul in care sunt folosite structuri pe mai multe niveluri (imbricate), break poate primi un argument de tip intreg prin intermediul caruia se precizeaza nivelul la care se va intrerupe executia instructiunilor: adica break n, unde n este o expresie care poate fi evaluata la tipul mentionat in plus, break 1 are acelasi efect ca break 23

Curs 7 1. Instrucţiuni conditionale 1.1. Instrucţiunea if 1.2. Instrucţiunea switch 1.3. Instrucţiuni pentru controlul execuţiei iteraţiilor 2. Instrucţiuni repetitive 2.1. Instrucţiunea while 2.2. Instrucţiunea do while 2.3. Instrucţiunea for 24

2. Instructiuni repetitive Structurile repetitive (sau de ciclare) sunt implementate in limbajul PHP prin intermediul instructiunilor: while si for (structura repetitiva conditionata anterior) respectiv do...while (structura repetitiva conditionata posterior) fiind utilizate in scopul executiei repetate a unor secvente de cod. Executia unei astfel de secvente poarta numele de ciclu, iteraţie sau buclă (loop). 25

Curs 7 1. Instrucţiuni conditionale 1.1. Instrucţiunea if 1.2. Instrucţiunea switch 1.3. Instrucţiuni pentru controlul execuţiei iteraţiilor 2. Instrucţiuni repetitive 2.1. Instrucţiunea while 2.2. Instrucţiunea do while 2.3. Instrucţiunea for 26

2.1. Instructiunea while Sintaxa instructiunii while este urmatoarea: while (expresie) { grup instructiuni } Procesorul PHP executa grupul de instructiuni grup in mod repetat, atat timp cat expresia expresie este evaluata cu valoarea logica true. 27

Evaluarea expresiei amintite se face la inceputul fiecarei iteratii, ceea ce inseamna ca este posibil ca, in cazul in care prima evaluare genereaza valoarea logica false, instructiunile incluse in secventa grup sa nu fie executate niciodata. Acoladele sunt necesare numai daca grup contine cel putin doua instructiuni. 28

Exemplu: Se calculeaza suma: <?php $s=0; $i=1; while($i <= 5) { $s+=$i + $i; $i++; } echo ($s);?> 29

Curs 7 1. Instrucţiuni conditionale 1.1. Instrucţiunea if 1.2. Instrucţiunea switch 1.3. Instrucţiuni pentru controlul execuţiei iteraţiilor 2. Instrucţiuni repetitive 2.1. Instrucţiunea while 2.2. Instrucţiunea do while 2.3. Instrucţiunea for 30

2.2. Instructiunea do...while Desi utilizarea instructiunii do...while nu este absolut necesara, ea permite obtinerea unei flexibilitati sporite in scrierea scripturilor. Sintaxa acestei instructiuni este urmatoarea: do { grup instructiuni } while (expresie); 31

Instructiunea do... while este asemanatoare cu while, cu exceptia faptului ca evaluarea expresiei expresie se face dupa executia grupului de instructiuni grup rezultand ca aceasta are loc cel putin o data! Acoladele sunt necesare numai daca grup include cel putin doua instructiuni. 32

Exemplu: Se calculeaza suma: <?php $s=0; $i=1; do { $s += $i + $i; $i++; }while($i <= 5); echo ($s);?> 33

Curs 7 1. Instrucţiuni conditionale 1.1. Instrucţiunea if 1.2. Instrucţiunea switch 1.3. Instrucţiuni pentru controlul execuţiei iteraţiilor 2. Instrucţiuni repetitive 2.1. Instrucţiunea while 2.2. Instrucţiunea do while 2.3. Instrucţiunea for 34

2.3. Instructiunea for Sintaxa instructiunii for este urmatoarea: for (expresie1; expresie2; expresie3) { grup instructiuni } Cele trei expresii (argumentele instructiunii), care - de cele mai multe ori - sunt construite pe baza unei variabile de ciclare, au urmatoarele semnificatii: 35

expresie1 (expresie de initializare) este evaluata o singura data, la inceputul executiei instructiunii for; expresie2 (expresia de test) - este evaluata la inceputul fiecarei iteratii. In functie de rezultatul evaluarii, se executa sau nu grupul de instructiuni grup. expresie3 (expresia de modificare) - este folosita pentru a introduce actiunile care urmeaza a fi efectuate asupra variabilei de ciclare (incrementare/decrementare). 36

Exemplu: <?php for ($i=2; $i<10; $i++) { echo "Patratul lui ".$i." este ". $i*$i. ".<br />"; }?> 37

Alaturi de instructiunile repetitive analizate pana aici, in PHP este implementata si instructiunea foreach, deosebit de utila pentru traversarea iterativa a tablourilor asociative sau nesecventiale (in ultimul caz nefiind posibila folosirea instructiunii for), dar si a celor indexate numeric. 38

Exemplu in care se utilizeaza instructiunea break, pe un singur nivel intr-un ciclu foreach: <?php $tablou=array(1,2,3,4,5,6,7,8,9); foreach ($tablou as $element) { if ($element>5) { break; echo $element.", "; } }?> Dupa executia scriptului, acesta va afisa 1, 2, 3, 4, 5. 39

40 Spre deosebire de break, instructiunea continue este folosita in instructiunile repetitive pentru a intrerupe executia iteratiei curente, continuandu-se cu urmatoarea. Exemplu in care se utilizeaza instructiunea continue: <?php $tablou=array(1,2,3,4,5,6,7,8,9,0); foreach ($tablou as $element) { if ($element > 4) { continue; echo "Numarul ".$element." este mai mic decat 5;<br />" } }?> Se afiseaza: Numarul 1 este mai mic decat 5; Numarul 2 este mai mic decat 5; Numarul 3 este mai mic decat 5; Numarul 4 este mai mic decat 5;

Curs 7 3. Funcţii 3.1. Apelarea funcţiilor 3.2. Funcţii definite de utilizator 3.2.1. Definirea funcţiilor 3.2.2. Variabile automatice 3.2.3. Funcţii care întorc valori 3.2.4. Accesul la variabile declarate în exterior. Variabile globale 3.2.5. Funcţii recursive 3.2.6. Terminarea execuţiei unui script 41

3. Funcţii În PHP se pot crea funcţii fără prea mari diferenţe faţă de ce ştim din C/C++. În programare, o funcţie include o secvenţă de cod, care realizează o anumită operaţie şi poate fi apelată în mod repetat, de câte ori este necesar. Altfel spus, o funcţie constă dintr-un set de instrucţiuni care realizează o sarcină specifică. 42

Exemplu, un script in care se utilizeaza o functie pentru calculul ariei unui triunghi si apoi afiseaza aria. <?php function aria_t($b, $h) { return $b*$h/2; } $x=3; $y=8; echo (aria_t($x, $y));?> 43

Definitiile functiilor PHP pot fi plasate oriunde in interiorul unui script, dar este preferabila plasarea la inceputul acestuia. In scopul maririi gradului de reutilizare a functiilor, se poate folosi drept alternativa plasarea functiilor in fisiere distincte (avand extensia.php,.inc, etc.), urmand ca acestea sa fie incluse in scripturi prin intermediul instructiunilor PHP dedicate. 44

Curs 7 3. Funcţii 3.1. Apelarea funcţiilor 3.2. Funcţii definite de utilizator 3.2.1. Definirea funcţiilor 3.2.2. Variabile automatice 3.2.3. Funcţii care întorc valori 3.2.4. Accesul la variabile declarate în exterior. Variabile globale 3.2.5. Funcţii recursive 3.2.6. Terminarea execuţiei unui script 45

3.1. Apelarea funcţiilor Forma generala a unui apel de funcţie este urmatoarea: nume_ functie (argument1, argument2,...) Analizand forma prezentata, se poate observa ca apelul unei functii consta in apelarea numelui sau, urmat imediat de o lista de argumente actuale (sau parametri actuali), numarul acestora variind de la o functie la alta (argument1, argument2,...). Fiecare argument trebuie sa fie o expresie valida, care poate include si alte apeluri de functii. 46

Curs 7 3. Funcţii 3.1. Apelarea funcţiilor 3.2. Funcţii definite de utilizator 3.2.1. Definirea funcţiilor 3.2.2. Variabile automatice 3.2.3. Funcţii care întorc valori 3.2.4. Accesul la variabile declarate în exterior. Variabile globale 3.2.5. Funcţii recursive 3.2.6. Terminarea execuţiei unui script 47

3.2. Functii definite de utilizator In ceea ce priveste modalitatile de creare, functiile PHP pot fi definite de utilizator sau predefinite. 3.2.1. Definirea functiilor Pentru definirea unei functii in PHP se utilizeaza urmatoarea sintaxa: function nume_functie(argument1, argument2,...) { // Corpul functiei: lista de instructiuni } 48

Se observa ca definitia unei functii include urmatoarele parti: 1. numele functiei (nume_functie), precedat de cuvantul-cheie function; 2. lista de argumente formale (care poate sa fie si vida), inclusa intre doua paranteze rotunde (argument1, argument2,...); 3. corpul functiei, care consta din orice secventa valida de cod, continuta in mod obligatoriu intre acolade, inclusiv definitiile altor functii sau ale unor clase. 49

Curs 7 3. Funcţii 3.1. Apelarea funcţiilor 3.2. Funcţii definite de utilizator 3.2.1. Definirea funcţiilor 3.2.2. Variabile automatice 3.2.3. Funcţii care întorc valori 3.2.4. Accesul la variabile declarate în exterior. Variabile globale 3.2.5. Funcţii recursive 3.2.6. Terminarea execuţiei unui script 50

3.2.2. Variabile automatice Variabilele locale (utilizate in interiorul functiilor) sunt denumite si automatice, deoarece ele sunt create automat la inceputul executiei functiei si distruse, tot automat la sfarsit. Din acest motiv, functiile vor pierde valorile variabilelor utilizate in interiorul lor. 51

Exemplu: <?php function bun_venit($utilizator) { $mesaj="bine ai venit, ".$utilizator; echo $mesaj; } bun_venit ("Costica") ; echo $mesaj; eroare?> In acest exemplu, incercarea de a afisa variabila locala $mesaj in exteriorul functiei bun_venit() se soldeaza cu un esec, aceasta fiind o variabila locala. 52

Curs 7 3. Funcţii 3.1. Apelarea funcţiilor 3.2. Funcţii definite de utilizator 3.2.1. Definirea funcţiilor 3.2.2. Variabile automatice 3.2.3. Funcţii care întorc valori 3.2.4. Accesul la variabile declarate în exterior. Variabile globale 3.2.5. Funcţii recursive 3.2.6. Terminarea execuţiei unui script 53

3.2.3. Functii care întorc valori Functiile pot intoarce (sau returna) valori. Pentru a intoarce o valoare dintr-o functie, trebuie realizat - in corpul sau - un apel al instructiunii return, acesta fiind urmata de o expresie valida: return expresie Apelul instructiunii return opreste imediat executia functiei, intoarce expresia expresie si transfera controlul executiei programului pe linia din care s-a realizat apelul. Valorile intoarse pot avea orice tip, inclusiv tablou si obiect. 54

Exemplu: Fie o functie avand numele cub(), care intoarce cubul numarului primit ca argument (adica, numarul ridicat la puterea a treia): function cub($numar) { return $numar*$numar*$numar; } Dupa ce a fost definita, o functie poate fi utilizata oriunde se doreste, inclusiv expresiile PHP, ca in exemplul urmator: $numar=10; echo 'Cubul numarului '.$numar.' este '.cub($numar); 55

Desi functiile nu pot intoarce simultan mai multe valori, se obtin rezultate similare daca se intorc tablouri, ca in exemplul urmator: <?php function note(){ return array (9, 8, 10); } list ($fizica, $matematica, $informatica)=note(); echo "Nota la fizica: ".$fizica.";<br />"; echo "Nota la matematica: ".$matematica.";<br />"; echo "Nota la informatica: ".$informatica.".";?> 56

Argumentele pot fi transferate functiilor prin valoare si prin referinta. Transferul argumentelor prin valoare In cazul transferului prin valoare, expresia transmisa ca argument este evaluata, iar valoarea obtinuta este atribuita in corpul functiei variabilei cu acelasi nume. Este posibil ca argumentele transferate prin valoare functiilor sa fie si tablouri, ca in exemplul prezentat in continuare, in care functia suma_elemente() intoarce suma elementelor tabloului transferat ca argument: 57

<?php function suma_elemente($tablou) { $nrelem=count($tablou); $sumaelem=0; for($i=0; $i< $nrelem;$i++) { $sumaelem += $tablou[$i]; } return $sumaelem; } echo "Suma elementelor tabloului este ".suma_elemente(array(10,5,12));?> 58

Transferul argumentelor prin referinta Aceasta modalitate de transfer impune ca argumentul functiei sa fie o variabila. In loc sa se refere la copia valorii variabilei transmise, variabila corespunzatoare din functie se refera chiar la valoarea variabilei respective, de fiecare data cand este utilizata. Drept rezultat, functia va schimba chiar valoarea variabilei transferata un exemplu in care este folosita aceasta modalitate de transfer: 59

<?php function cub(&$numar) { } $n=4; cub($n); echo $n;?> Transmitere prin referinta adresa variabilei $numar=$numar*$numar*$numar; 60

Curs 7 3. Funcţii 3.1. Apelarea funcţiilor 3.2. Funcţii definite de utilizator 3.2.1. Definirea funcţiilor 3.2.2. Variabile automatice 3.2.3. Funcţii care întorc valori 3.2.4. Accesul la variabile declarate în exterior. Variabile globale 3.2.5. Funcţii recursive 3.2.6. Terminarea execuţiei unui script 61

3.2.4. Accesul la variabile declarate in exterior. Variabile globale Fiecare functie are propriul ei set de variabile (argumentele si/sau cele definite in corpul sau). Toate variabilele utilizate in exteriorul oricarei functiii (cu exceptia variabilelor superglobale) nu sunt vizibile in interiorul acesteia, ceea ce inseamna ca ele nu sunt globale. 62

Daca se doreste accesarea in interiorul functiei a unei variabile folosite in exteriorul sau, trebuie folosit tabloul $GLOBALS, ca in exemplul urmator: <?php function modifica() { $GLOBALS["variabila"]=100; } $variabila=50; echo $variabila; modifica(); echo " ".$variabila;?> 63

De asemenea, este posibil ca una sau mai multe variabile sa poata fi declarate globale, prin extinderea domeniului lor de vizibilitate utilizand cuvantul-cheie global: [global] $variabila1, $variabila2,... Variabilele declarate globale (adica, in exteriorul oricarei functii) pot fi utilizate peste tot in script, inclusiv in definitiile functiilor. In scopul precizat, este necesar ce ele sa fie importate in interiorul functiilor folosind cuvantul cheie global, ca exemplul prezentat in continuare: 64

<?php function modifica(){ global $variabila; $variabila=10; echo $variabila; } modifica(); $variabila=20; echo " ".$variabila;?> 65

Se poate considera ca folosirea variabilelor declarate globale simplifica activitatea de programare, eliminand partial necesitatea utilizarii argumentelor in definitiile functiilor. Cu toate acestea, posibilitatea modificarii variabilelor in orice punct al scriptului, inclusiv in interiorul functiilor, poate avea drept consecinta scrierea unui cod dificil de inteles de catre cei care il citesc. In locul variabilelor declarate globale, este de preferat folosirea variabilelor locale, functiile urmand sa modifice numai acele variabile care le sunt transmise ca argumente prin referinta. 66

Curs 7 3. Funcţii 3.1. Apelarea funcţiilor 3.2. Funcţii definite de utilizator 3.2.1. Definirea funcţiilor 3.2.2. Variabile automatice 3.2.3. Funcţii care întorc valori 3.2.4. Accesul la variabile declarate în exterior. Variabile globale 3.2.5. Funcţii recursive 3.2.6. Terminarea execuţiei unui script 67

3.2.5. Functii recursive Ca si in alte limbaje de programare, in PHP pot fi definite si utilizate functiile recursive. Se spune ca o functie care se apeleaza pe ea insasi este o functie recursiva, metoda numindu-se recursivitate. Ca si intr-o structura ciclica, intr-o functie recursiva trebuie precizata o conditie de incheiere a executiei. Daca o functie se autoapeleaza direct, se spune ca se produce recursivitatea directa. In schimb, daca o functie se apeleaza pe ea insasi, prin intermediul altei functii, se spune ca se produce recursivitatea indirecta. In mod obisnuit, este utilizata recursivitatea directa. 68

In exemplul urmator este prezentata o functie (factorial ()) in care se utilizeaza recursivitatea directa: <?php function factorial($n) { if($n==1) return 1; else return $n*factorial($n-1); } echo "Factorial = ".factorial(5);?> 69

Curs 7 3. Funcţii 3.1. Apelarea funcţiilor 3.2. Funcţii definite de utilizator 3.2.1. Definirea funcţiilor 3.2.2. Variabile automatice 3.2.3. Funcţii care întorc valori 3.2.4. Accesul la variabile declarate în exterior. Variabile globale 3.2.5. Funcţii recursive 3.2.6. Terminarea execuţiei unui script 70

3.2.6. Terminarea executiei unui script O instructiune return determina sistarea executiei functiei care o contine. In cazul în care se doreste sistarea prelucrarii unui întreg script, se poate invoca functia exit(): <?php function stop() { exit(); } echo "<br />Unu..."; echo "<br />Doi..."; stop(); echo "<br />Trei...";?> 71

Dupa executie scriptul afiseaza: Unu... Doi... Rezultatul acestui script include cuvintele "Unu" si "Doi", dar nu si cuvântul "Trei". Prin apelarea functiei "stop()" se executa corpul functiei respective; la invocarea functiei, exit(), executia scriptului se încheie. 72

73 Întrebări?