tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora....

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

Upload: others

Post on 10-Jan-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Lector univ. dr. Adrian Runceanu

Tehnologii Web

1

Universitatea “Constantin Brâncuşi” din Târgu-JiuFacultatea de Inginerie

Departamentul de Automatică, Energie şi Mediu

Page 2: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Curs 8

Limbajul PHP

(partea II)

2

Page 3: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Curs 8

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

Tehnologii WEB

3

Page 4: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Curs 8

3. Funcţii3.1. Apelarea funcţiilor3.2. Funcţii definite de utilizator

3.2.1. Definirea funcţiilor3.2.2. Variabile automatice3.2.3. Funcţii care întorc valori3.2.4. Accesul la variabile declarate în exterior.

Variabile globale3.2.5. Funcţii recursive3.2.6. Terminarea execuţiei unui script

Tehnologii WEB

4

Page 5: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

1. Instrucţiuni(I)

• Ştim că orice program se poate scrie utilizand numai trei tipuri de structuri:

1. secventiala (sau liniara)2. alternativa3. 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.

Tehnologii WEB

5

Page 6: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

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

Tehnologii WEB

6

Page 7: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

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.

Tehnologii WEB

7

Page 8: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Curs 8

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

Tehnologii WEB

8

Page 9: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

1.1. Instructiunea ifCea 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.

Tehnologii WEB

9

Page 10: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Observatie:

In mod obisnuit, sunt folosite acoladele chiar daca grupul contine numai o singura instructiune.

Exemplu:

if ($numar>=10 && $numar<=30) {

echo "Valori intregi cuprinse intre 10 si 30";

}

Tehnologii WEB

10

Page 11: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

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.

Tehnologii WEB

11

Page 12: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

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);

?>

Tehnologii WEB

12

Page 13: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

• Instructiunea asociata unei instructiuni ifsau else poate fi ea însasi o instructiune if.

• O asemenea instructiune if se numeste "instructiune if imbricata".

Tehnologii WEB

13

Page 14: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

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";

?>

Tehnologii WEB

14

Page 15: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

• 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.

Tehnologii WEB

15

Page 16: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

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";

?>

Tehnologii WEB

16

Page 17: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Curs 8

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

Tehnologii WEB

17

Page 18: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

1.2. Instructiunea switch

A doua instructiune conditionala este switch, avand urmatoarea sintaxa:

switch (expresie){

case expresie1: grup1; break;

case expresie2: grup2; break;

. . . . .

[default: grup;]

}

Expresia expresie este comparata cu expresie1, expresie2,… .

Tehnologii WEB

18

Page 19: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

• Daca se gaseste o potrivire – pentru comparatie, se utilizeaza operatorul de egalitate “==” – (expresiek), va fi executata secventa de cod corespunzatoare (adica grupk), ignorand eventualele linii case ramase.

• Grupul de instructiuni grup, asociat cazului default, este executat numai daca, anterior, nu s-a gasit nici o potrivire.

Tehnologii WEB

19

Page 20: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Exemplu:Daca valoarea transmisa pentru x este 1,2,3,4, atunci

valoarea respectiva este retransmisa catre utilizatoralfabetic, altfel, se va transmite un mesaj oarecare:

<?phpswitch($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");

}?>

Tehnologii WEB

20

Page 21: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Curs 8

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

Tehnologii WEB

21

Page 22: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

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.

Tehnologii WEB

22

Page 23: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

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

Tehnologii WEB

23

Page 24: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Curs 8

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

Tehnologii WEB

24

Page 25: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

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).

Tehnologii WEB

25

Page 26: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Curs 8

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

Tehnologii WEB

26

Page 27: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

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.

Tehnologii WEB

27

Page 28: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

• 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 grupcontine cel putin doua instructiuni.

Tehnologii WEB

28

Page 29: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Tehnologii WEB

29

Exemplu:Se calculeaza suma:

<?php$s=0; $i=1;while($i <= 5){

$s+=$i + $i;$i++;

}echo ($s);

?>

Page 30: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Curs 8

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

Tehnologii WEB

30

Page 31: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

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);

Tehnologii WEB

31

Page 32: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

• 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 grupinclude cel putin doua instructiuni.

Tehnologii WEB

32

Page 33: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Tehnologii WEB

33

Exemplu:Se calculeaza suma:

<?php$s=0; $i=1;do{

$s += $i + $i;$i++;

}while($i <= 5);echo ($s);

?>

Page 34: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Curs 8

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

Tehnologii WEB

34

Page 35: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

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:

Tehnologii WEB

35

Page 36: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

• 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).

Tehnologii WEB

36

Page 37: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Tehnologii WEB

37

Exemplu:

<?php

for ($i=2; $i<10; $i++) {

echo "Patratul lui ".$i." este " . $i*$i . " .<br />";

}

?>

Page 38: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Alaturi de instructiunile repetitiveanalizate pana aici, in PHP este implementatasi instructiunea foreach, deosebit de utilapentru traversarea iterativa a tablourilorasociative sau nesecventiale (in ultimul caz nefiind posibila folosirea instructiunii for), dar si a celor indexate numeric.

Tehnologii WEB

38

Page 39: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

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.

Tehnologii WEB

39

Page 40: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

• Spre deosebire de break, instructiunea continue estefolosita in instructiunile repetitive pentru a intrerupeexecutia 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;

Tehnologii WEB

40

Page 41: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Curs 8

3. Funcţii3.1. Apelarea funcţiilor3.2. Funcţii definite de utilizator

3.2.1. Definirea funcţiilor3.2.2. Variabile automatice3.2.3. Funcţii care întorc valori3.2.4. Accesul la variabile declarate în exterior.

Variabile globale3.2.5. Funcţii recursive3.2.6. Terminarea execuţiei unui script

Tehnologii WEB

41

Page 42: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

3. Funcţii

• În PHP se pot crea funcţii fără prea maridiferenţ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ă.

Tehnologii WEB

42

Page 43: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Tehnologii WEB

43

Exemplu, un script in care se utilizeaza o functiepentru 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));

?>

Page 44: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

• 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.

Tehnologii WEB

44

Page 45: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Curs 8

3. Funcţii3.1. Apelarea funcţiilor3.2. Funcţii definite de utilizator

3.2.1. Definirea funcţiilor3.2.2. Variabile automatice3.2.3. Funcţii care întorc valori3.2.4. Accesul la variabile declarate în exterior.

Variabile globale3.2.5. Funcţii recursive3.2.6. Terminarea execuţiei unui script

Tehnologii WEB

45

Page 46: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

3.1. Apelarea funcţiilorForma generala a unui apel de funcţie este

urmatoarea:

nume_ functie (argument1, argument2, ...)

• Analizand forma prezentata, se poate observa caapelul unei functii consta in apelarea numelui sau, urmat imediat de o lista de argumente actuale (sauparametri 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.

Tehnologii WEB

46

Page 47: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Curs 8

3. Funcţii3.1. Apelarea funcţiilor3.2. Funcţii definite de utilizator

3.2.1. Definirea funcţiilor3.2.2. Variabile automatice3.2.3. Funcţii care întorc valori3.2.4. Accesul la variabile declarate în exterior.

Variabile globale3.2.5. Funcţii recursive3.2.6. Terminarea execuţiei unui script

Tehnologii WEB

47

Page 48: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

3.2. Functii definite de utilizator

In ceea ce priveste modalitatile de creare, functiile PHPpot 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

}

Tehnologii WEB

48

Page 49: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

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.

Tehnologii WEB

49

Page 50: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Curs 8

3. Funcţii3.1. Apelarea funcţiilor3.2. Funcţii definite de utilizator

3.2.1. Definirea funcţiilor3.2.2. Variabile automatice3.2.3. Funcţii care întorc valori3.2.4. Accesul la variabile declarate în exterior.

Variabile globale3.2.5. Funcţii recursive3.2.6. Terminarea execuţiei unui script

Tehnologii WEB

50

Page 51: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

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.

Tehnologii WEB

51

Page 52: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Exemplu:

<?php

function bun_venit($utilizator) {

$mesaj="Bine ai venit, ".$utilizator;

echo $mesaj;

}

bun_venit ("Costica") ;

echo $mesaj;

?>

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.

Tehnologii WEB

52

eroare

Page 53: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Curs 8

3. Funcţii3.1. Apelarea funcţiilor3.2. Funcţii definite de utilizator

3.2.1. Definirea funcţiilor3.2.2. Variabile automatice3.2.3. Funcţii care întorc valori3.2.4. Accesul la variabile declarate în exterior.

Variabile globale3.2.5. Funcţii recursive3.2.6. Terminarea execuţiei unui script

Tehnologii WEB

53

Page 54: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

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.

Tehnologii WEB

54

Page 55: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

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 utilizataoriunde se doreste, inclusiv expresiile PHP, ca in exemplul urmator:

$numar=10;

echo 'Cubul numarului ' .$numar.' este ' .cub($numar);

Tehnologii WEB

55

Page 56: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Tehnologii WEB

56

Desi functiile nu pot intoarce simultan mai multe valori, se obtin rezultate similare daca se intorc tablouri, ca in exemplul urmator:

<?phpfunction 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.".";

?>

Page 57: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Argumentele pot fi transferate functiilor prin valoare si prin referinta.

1. 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:

Tehnologii WEB

57

Page 58: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Tehnologii WEB

58

<?phpfunction 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));

?>

Page 59: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

2. Transferul argumentelor prin referinta

• Aceasta modalitate de transfer impune caargumentul functiei sa fie o variabila.

• In loc sa se refere la copia valorii variabileitransmise, variabila corespunzatoare din functie se refera chiar la valoarea variabileirespective, de fiecare data cand este utilizata.

• Drept rezultat, functia va schimba chiarvaloarea variabilei transferata.

• Exemplu in care este folosita aceastamodalitate de transfer:

Tehnologii WEB

59

Page 60: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Tehnologii WEB

60

<?php

function cub(&$numar) {

$numar=$numar*$numar*$numar;

}

$n=4;

cub($n);

echo $n;

?>

Transmitere prinreferinta – adresa

variabilei

Page 61: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Curs 8

3. Funcţii3.1. Apelarea funcţiilor3.2. Funcţii definite de utilizator

3.2.1. Definirea funcţiilor3.2.2. Variabile automatice3.2.3. Funcţii care întorc valori3.2.4. Accesul la variabile declarate în exterior.

Variabile globale3.2.5. Funcţii recursive3.2.6. Terminarea execuţiei unui script

Tehnologii WEB

61

Page 62: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

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.

Tehnologii WEB

62

Page 63: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Tehnologii WEB

63

• Daca se doreste accesarea in interiorul functiei a uneivariabile folosite in exteriorul sau, trebuie folosit tabloul$GLOBALS, ca in exemplul urmator:

<?phpfunction modifica()

{ $GLOBALS["variabila"]=100; } $variabila=50;echo $variabila; modifica(); echo " ".$variabila;

?>

Page 64: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

• 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:

Tehnologii WEB

64

Page 65: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Tehnologii WEB

65

<?phpfunction modifica(){

global $variabila; $variabila=10;echo $variabila;

}modifica();$variabila=20;echo " ".$variabila;

?>

Page 66: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

• 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.

Tehnologii WEB

66

Page 67: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Curs 8

3. Funcţii3.1. Apelarea funcţiilor3.2. Funcţii definite de utilizator

3.2.1. Definirea funcţiilor3.2.2. Variabile automatice3.2.3. Funcţii care întorc valori3.2.4. Accesul la variabile declarate în exterior.

Variabile globale3.2.5. Funcţii recursive3.2.6. Terminarea execuţiei unui script

Tehnologii WEB

67

Page 68: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

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.

Tehnologii WEB

68

Page 69: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Tehnologii WEB

69

In exemplul urmator este prezentata o functie (factorial ()) in care se utilizeaza recursivitatea directa:

<?phpfunction factorial($n) {

if($n==1)return 1;

elsereturn $n*factorial($n-1);

}echo "Factorial = ".factorial(5);

?>

Page 70: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Curs 8

3. Funcţii3.1. Apelarea funcţiilor3.2. Funcţii definite de utilizator

3.2.1. Definirea funcţiilor3.2.2. Variabile automatice3.2.3. Funcţii care întorc valori3.2.4. Accesul la variabile declarate în exterior.

Variabile globale3.2.5. Funcţii recursive3.2.6. Terminarea execuţiei unui script

Tehnologii WEB

70

Page 71: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

3.2.6. Terminarea executiei unui scriptO 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..."; ?>

Tehnologii WEB

71

Page 72: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

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.

Tehnologii WEB

72

Page 73: tehnologii web...rolul de a introduce elemente de control suplimentare in executia acestora. •Instructiunea break are rolul de a intrerupe executia iteratiei curente si, odata cu

Întrebări?

73