tehnologii web - runceanu.ro · 2. utilizarea funcţiei array() •dacă funcţia array() se...

92
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 16-Jan-2020

13 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

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

Page 2: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

Curs 8

Limbajul PHP

(partea III)

2

Page 3: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

curs 8

1. Tipuri compuse

1.1. Tipul tablou

1.1.1. Crearea tablourilor

1.1.2. Tablouri multidimensionale

1.1.3. Parcurgerea tablourilor

1.1.4. Sortarea tablourilor

1.1.5. Transformarea tablourilor

1.2. Tipul obiect

Tehnologii WEB

3

Page 4: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

curs 8

1.2. Tipul obiect

1.2.1. Clasele

1.2.2. Alcătuirea şi instanţierea unei clase

1.2.3. Definirea unei metode constructor

1.2.4. Utilizarea moştenirii

1.2.5. Redefinirea metodelor

1.2.6. Invocarea unei metode redefinite

1.2.7. Tablouri cu obiecte

Tehnologii WEB

4

Page 5: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

Tipuri de date compuse

În PHP sunt utilizate două tipuri de date compuse:

1. tipul tablou

2. tipul obiect

Tehnologii WEB

5

Page 6: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

curs 8

1. Tipuri compuse

1.1. Tipul tablou

1.1.1. Crearea tablourilor

1.1.2. Tablouri multidimensionale

1.1.3. Parcurgerea tablourilor

1.1.4. Sortarea tablourilor

1.1.5. Transformarea tablourilor

1.2. Tipul obiect

Tehnologii WEB

6

Page 7: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

1.1. Tipul tablou

Tipul tablou se referă la colecţii de date indexate, numite elements, care pot fi utilizate împreună.

• Acest tip este foarte puternic şi des folosit în PHP.

• Astfel, tablourile se dovedesc a fi cele mai potrivite containere pentru stocarea datelor în scopul manipulării acestora (sortare).

Tehnologii WEB

7

Page 8: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• De asemenea, funcţiile care extrag rezultatele obţinute în urma interogării unei baze de date, întorc tablouri.

• În plus, unele dintre variabilele predefinite în PHP au tipul tablou:

1. $_GET

2. $_POST

3. $_SESSION

Tehnologii WEB

8

Page 9: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• Un element al unui tablou este precizat indicând numele tabloului şi cheia (numit şi indexul elementului).

• Cheile pot fi: 1. numere întregi (tabloul corespunzător este de tip numeric)

2. şiruri de caractere (tabloul corespunzător este de tip asociativ)

• Cheile având ultimul tip precizat trebuie incluse între ghilimele sau apostrofuri.

Exemple:

$note['matematica'] = 9

sau

$note["matematica"]= 9

Tehnologii WEB

9

Page 10: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

curs 8

1. Tipuri compuse

1.1. Tipul tablou

1.1.1. Crearea tablourilor

1.1.2. Tablouri multidimensionale

1.1.3. Parcurgerea tablourilor

1.1.4. Sortarea tablourilor

1.1.5. Transformarea tablourilor

1.2. Tipul obiect

Tehnologii WEB

10

Page 11: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

1.1.1. Crearea tablourilor

Există următoarele 3 modalităţi de creare a unui tablou:

1. prin atribuire directă

2. folosind funcţia array()

3. precizând cheile odată cu utilizarea funcţiei array()

Tehnologii WEB

11

Page 12: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

1. Atribuirea directă

• Utilizarea acestei modalitati presupune precizarea numelui tabloului, precum si a cheilor si valorilor fiecarui element.

• In cazul in care se doreste utilizarea unei chei de tip sir de caractere, se procedeaza ca in exemplul urmator:

$elev["scoala"] ="Mihail Sadoveanu";

$elev["clasa"]=10;

$elev["varsta"]=16;

Tehnologii WEB

12

Page 13: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• În exemplul oferit, PHP creează automat un tablou cu trei elemente.

• Este important de menţionat că elementele tabloului $elev pot fi indicate ulterior precizând cheia de tip şir de caractere şi/sau cheia numerică.

• Cheile numerice primesc automat valori întregi succesive, prima fiind 0.

Tehnologii WEB

13

10-M

ay-

13

Page 14: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• De exemplu, vârsta unui elev poate fi precizat în următoarele două moduri:

$varsta=$elev["varsta"];

$varsta=$elev[2];

• Modificarea valorii unui element se realizează printr-o nouă atribuire, ca în exemplul prezentat în continuare (elevul este promovat în anul şcolar următor):

$elev["clasa"]=11;

Tehnologii WEB

14

10-M

ay-

13

Page 15: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• Pentru crearea unui tablou prin atribuire directă, pot fi precizate şi chei numerice, ca în exemplul următor:

$orase[0]="Bucuresti";

$orase[1]="Iasi";

$orase[2]="Timisoara";

Tehnologii WEB

15

10-M

ay-

13

Page 16: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• Este posibil să se pornească de la o cheie numerică diferită de 0 sau să se indice chei care nu au valori succesive.

• De asemenea, este posibil să nu se precizeze nici o cheie, ca în exemplul următor:

$tariUE[]="Franta";

$tariUE[]="Germania";

$tariUE[]="Romania";

• În acest exemplu, PHP creează automat tabloul $tariUE, atribuind elementelor acestuia chei numerice succesive, începând cu valoarea 0 (adică 0, 1 şi 2).

Tehnologii WEB

16

10-M

ay-

13

Page 17: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

2. Utilizarea funcţiei array()

• Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente).

• Pentru a crea un tablou nevid, valorile elementelor acestuia trebuie precizate ca argumente, sub forma unei liste ale cărei componente sunt separate prin caracterul virgulă, ca în exemplul prezentat în continuare: $orase=array("Bucuresti", "lasi", "Timisoara");

• Valorile precizate ca argumente ale funcţiei vor fi stocate ca elemente în tabloul $orase, în ordinea precizării lor, cheile acestora având valori întregi succesive începând cu 0.

Tehnologii WEB

17

10-M

ay-

13

Page 18: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

3. Precizarea cheilor

• PHP oferă posibilitatea de a preciza cheile elementelor odată cu crearea unui tablou prin intermediul funcţiei array().

• În acest caz, este necesar ca argumentele funcţiei să fie reprezentate de o listă de perechi cheie-valoare, separate prin virgulă, în care cheia şi valoarea sunt separate prin simbolul „=>".

• Cheile precizate pot fi numerice sau şiruri.

Tehnologii WEB

18

10-M

ay-

13

Page 19: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

Exemplu în care cheile sunt numerice:

$orase=array(0=>"Bucuresti", 1=>"Iasi", 2=>"Timisoara");

• Dacă se doreşte precizarea unor chei de tip şir de caractere, se procedează astfel:

$orase2=array (

"Capitala"=>"Bucuresti",

"Moldova"=>"Iasi",

"Banat"=>"Timisoara");

• În exemplul de mai sus, cheile celor trei elemente ale tabloului sunt, în ordine, "Capitala", "Moldova" şi "Banat".

Tehnologii WEB

19

10-M

ay-

13

Page 20: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

curs 8

1. Tipuri compuse

1.1. Tipul tablou

1.1.1. Crearea tablourilor

1.1.2. Tablouri multidimensionale

1.1.3. Parcurgerea tablourilor

1.1.4. Sortarea tablourilor

1.1.5. Transformarea tablourilor

1.2. Tipul obiect

Tehnologii WEB

20

10-M

ay-

13

Page 21: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

1.1.2. Tablouri multidimensionale

• În exemplele anterioare, pentru a ilustra cele trei metode de creare a tablourilor, au fost utilizate tablouri unidimensionale.

• Deşi acestea sunt mai rar utilizate, PHP oferă şi posibilitatea de a crea tablouri multidimensionale.

Tehnologii WEB

21

10-M

ay-

13

Page 22: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

În continuare este prezentat un exemplu în care este creat un tablou bidimensional, prin intermediul funcţiei array():

$note=array ('sem1' =>

array('matematica'=>9,

'fizica'=>9,

'informatica'=>10),

'sem2'=>

array('matematica' =>9,

'fizica'=>8,

'informatica'=>9) );

Tehnologii WEB

22

10-M

ay-

13

Page 23: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

Acelaşi tablou poate fi creat prin atribuire directă în felul următor:

$note["sem1"] [ "matematica"] =9;

$note["sem1"] [ "fizica"] =9;

$note["sem1"] ["informatica"] =10;

$note["sem2"] ["matematica"] =9;

$note["sem2"] [ "fizica"] =8;

$note["sem2"] ["informatica"] =9;

• Atunci când este posibil, tablourile multidimensionale se vor crea folosind instrucţiunile repetitive (de exemplu instrucţiunea for).

Tehnologii WEB

23

10-M

ay-

13

Page 24: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

curs 8

1. Tipuri compuse

1.1. Tipul tablou

1.1.1. Crearea tablourilor

1.1.2. Tablouri multidimensionale

1.1.3. Parcurgerea tablourilor

1.1.4. Sortarea tablourilor

1.1.5. Transformarea tablourilor

1.2. Tipul obiect

Tehnologii WEB

24

10-M

ay-

13

Page 25: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

1.1.3. Parcurgerea tablourilor

Există diverse modalităţi pentru a parcurge elementele unui tablou (operaţie cunoscută şi sub denumirea de traversarea tabloului), cea mai elegantă dintre acestea constând în utilizarea instrucţiunii foreach, cu următoarea sintaxă:

foreach($tablou as [$cheie=>] [&] $valoare)

{

grup de instrucţiuni

}

Tehnologii WEB

25

10-M

ay-

13

Page 26: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• Variabila $cheie este opţională şi, atunci când este specificată, conţine cheia elementului curent.

• De asemenea, caracterul „&" este opţional şi, atunci când este prezent, permite modificarea explicită a valorii elementului $valoare prin intermediul instrucţiunilor incluse în grupul grup) şi transmiterea automată a valorii către tablou ($tablou).

• În cele mai multe cazuri, nu se doreşte modificarea valorii elementelor, astfel încât caracterul „&" nu se foloseşte.

Tehnologii WEB

26

10-M

ay-

13

Page 27: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

Exemplu în care se utilizează instrucţiunea foreach:

<?php

$orase=array("Bucuresti", "lasi", "Timisoara");

echo "Orase romanesti:<br />";

foreach($orase as $cheie=>$valoare) {

echo "$cheie=$valoare<br />";

}

/*

Se va afisa:

Orase romanesti:

0=Bucuresti

1=Iasi

2=Timisoara

*/

?>

Tehnologii WEB

27

10-M

ay-

13

Page 28: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

O altă modalitate de parcurgere a elementelor unui tablou consta în utilizarea funcţiilor list() şi each(), ca în exemplul următor:

<?php $orase=array("Bucuresti", "lasi", "Timisoara"); echo "Orase romanesti:<br />"; reset($orase); while (list($cheie, $valoare) = each($orase)) { echo "$cheie=$valoare<br />"; } ?>

Tehnologii WEB

28

10-M

ay-

13

Page 29: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• Funcţia list() permite atribuirea simultană de valori mai multor variabile utilizând elementele unui tablou:

list(Svariabila1, $variabila2, ...) = $tablou;

• Ca rezultat al execuţiei instrucţiunii anterioare, variabilelor $variabila1, $variabila2, ... li se vor atribui valorile elementelor $tablou[0], $tablou[1], ... , echivalent cu a realiza următoarele atribuiri:

$variabila1 = $tablou[0];

$variabila2 = $tablou[1];

. . .

Tehnologii WEB

29

10-M

ay-

13

Page 30: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• Funcţia each() întoarce perechea cheie-valoare curentă a tabloului primit ca argument şi deplasează pointerul intern la următorul element.

• Perechea întoarsă este, de fapt, un tablou cu patru elemente:

• cele având cheile 0 şi "key" păstrează cheia elementului

• iar cele având cheile 1 şi "value" păstrează valoarea acestuia

Tehnologii WEB

30

10-M

ay-

13

Page 31: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• Pentru traversarea unui tablou este utilizat un pointer (numărator) intern al acestuia care înregistrează poziţia curentă.

• Dacă se foloseşte funcţia each() pentru parcurgerea unui tablou, spre deosebire de instrucţiunea foreach, este necesar ca – în prealabil – să se apeleze funcţia reset(), care va muta pointerul intern la începutul tabloului.

Tehnologii WEB

31

10-M

ay-

13

Page 32: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

curs 8

1. Tipuri compuse

1.1. Tipul tablou

1.1.1. Crearea tablourilor

1.1.2. Tablouri multidimensionale

1.1.3. Parcurgerea tablourilor

1.1.4. Sortarea tablourilor

1.1.5. Transformarea tablourilor

1.2. Tipul obiect

Tehnologii WEB

32

10-M

ay-

13

Page 33: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

1.1.4. Sortarea tablourilor

Pentru sortarea tablourilor sunt utilizate o serie de funcţii dintre, care menţionăm:

1. sort() – sortează ascendent un tablou în funcţie de valoarea elementelor

2. rsort() – sortează descendent un tablou în funcţie de valoarea elementelor

3. asort() – sortează ascendent un tablou asociativ în funcţie de valoarea elementelor

4. arsort() – sortează descendent un tablou asociativ în funcţie de valoarea elementelor

5. ksort() - sortează ascendent un tablou în funcţie de cheie

6. krsort() - sortează descendent un tablou în funcţie de cheie

Tehnologii WEB

33

10-M

ay-

13

Page 34: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

Prototipul sort() este următorul:

bool sort(array tablou [, int parametru])

• După cum se poate observa, funcţia sort() primeşte ca argument obligatoriu numele unui tablou pe care îl va sorta ascendent, în funcţie de valorile elementelor sale.

Tehnologii WEB

34

10-M

ay-

13

Page 35: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• argumentul opţional parametru este utilizat pentru a schimba comportamentul funcţiei la sortare şi poate avea ca valoare următoarele constante:

1. sort_regular (valoare implicită) - elementele sunt comparate normal

2. sort_numeric - elementele sunt comparate din punct de vedere numeric

3. sort_string - elementele sunt comparate ca şiruri de caractere codul ASCII al primului caracter/cifră)

Tehnologii WEB

35

10-M

ay-

13

Page 36: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• Funcţia sort() întoarce valoarea true, în caz de succes, şi false în cazul în care sortarea nu s-a produs.

• În primul caz, funcţia atribuie noi chei elementelor tabloului.

Exemplu de utilizare:

<?php

$alfanumeric=array("B", "a", 5, 100, "A");

function sorteaza($tablou, $parametru=SORT_REGULAR) {

sort($tablou, $parametru);

foreach ($tablou as $cheie=>$valoare) {

echo "tablou[".$cheie."]=".$valoare."<br />";

}

}

Tehnologii WEB

36

10-M

ay-

13

Page 37: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

sorteaza($alfanumeric);

/* Se va afisa:

tablou[0]=A

tablou[1]=B

tablou[2]=a

tablou[3]=5

tablou[4]=100

*/

Tehnologii WEB

37

10-M

ay-

13

Page 38: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

sorteaza($alfanumeric, SORT_NUMERIC); /* Se va afisa: tablou[0]=B tablou[1]=a tablou[2]=A tablou[3]=5 tablou[4]=100 */ sorteaza($alfanumeric, SORT_STRING); / * Se va afisa: tablou[0]=100 tablou[1]=5 tablou[2]=A tablou[3]=B tablou[4]=a */ ?>

Tehnologii WEB

38

10-M

ay-

13

Page 39: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

curs 8

1. Tipuri compuse

1.1. Tipul tablou

1.1.1. Crearea tablourilor

1.1.2. Tablouri multidimensionale

1.1.3. Parcurgerea tablourilor

1.1.4. Sortarea tablourilor

1.1.5. Transformarea tablourilor

1.2. Tipul obiect

Tehnologii WEB

39

10-M

ay-

13

Page 40: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

1.1.5. Transformarea tablourilor

În PHP sunt definite o serie de funcţii utilizate pentru transformarea tablourilor.

Prin transformare se înţelege:

1. unirea tablourilor

2. extragerea/eliminarea unor porţiuni din acestea

Tehnologii WEB

40

10-M

ay-

13

Page 41: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

1. Unirea tablourilor

• Pentru unirea a două sau mai multe tablouri într-unul singur, se utilizează funcţia array_merge() al cărei prototip este următorul:

array array_merge(array tablou1 [, array tablou2 [, array …]])

• Funcţia reuneşte elementele tablourilor precizate ca argumente, astfel încât elementele unuia sunt adăugate la sfârşitul celui anterior, întorcând tabloul rezultat.

• Dacă unele elemente au aceleaşi chei de tip şir de caractere, ultima valoare o va suprascrie pe cea anterioară.

• Nu acelaşi lucru se întâmplă cu cheile numerice.

Tehnologii WEB

41

10-M

ay-

13

Page 42: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

Exemplu:

<?php $tablou1=array("oras"=>"Bucuresti", 10, 89); $tablou2=array("abac","computer","oras"=>"Braila",4); $rezultat=array_merge($tablou1, $tablou2); print_r($rezultat); /* Se va afisa: Array ( [oras]=>Braila [0]=>10 [1]=>89 [2]=>abac [3]=>computer [4]=> 4 ) */ ?>

Tehnologii WEB

42

10-M

ay-

13

Page 43: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

2. Extragerea unei porţiuni dintr-un tablou

• Funcţia array_slice(), care extrage o porţiune dintr-un tablou, are următorul prototip: array array_slice(array tablou, int offset [, int lungime [,

bool pastreazacheile ]] ) • Aceasta funcţie extrage din tablou, elementele precizate

prin intermediul argumentelor offset şi lungime. • Dacă offset nu este negativ, secvenţa de elemente

extrase începe cu cel având poziţia offset în raport cu începutul tabloului.

• Dacă acest argument este negativ, poziţia primului element extras va fi calculată în raport cu sfârşitul tabloului.

• Dacă argumentul lungime nu este precizat, vor fi extrase toate elementele până la sfârşitul tabloului.

Tehnologii WEB

43

10-M

ay-

13

Page 44: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

Exemplu:

<?php $tablou=array("rosu", "galben", "albastru", "verde", "negru"); $extras=array_slice($tablou, 2); print_r($extras); /* Se va afisa: Array ( [0]=> albastru [1]=> verde [2]=> negru ) */

Tehnologii WEB

44

10-M

ay-

13

Page 45: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

$tablou=array("rosu", "galben", "albastru", "verde", "negru"); $extras=array_slice($tablou, -2, 1); print_r($extras) ; /* Se va afisa: Array ( [0]=> verde ) */ $tablou=array("rosu", "galben", "albastru", "verde", "negru"); $extras=array_slice($tablou, 0, 3); print_r($extras) ; /* Se va afisa: Array ( [0] => rosu [1] => galben [2] => albastru ) */

Tehnologii WEB

45

10-M

ay-

13

Page 46: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

$tablou=array("rosu", "galben", "albastru", "verde", "negru"); $extras=array_slice($tablou, 2, -1); print_r($extras); /* Se va afisa: Array ( [0]=> albastru [1]=> verde ) */ $tablou=array("rosu", "galben", "albastru", "verde", "negru"); $extras=array_slice($tablou,2,-1,true);

print_r($extras); /* Se va afisa:

Array ( [2]=> albastru [3]=> verde ) */ ?>

Tehnologii WEB

46

10-M

ay-

13

Page 47: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

curs 8

1.2. Tipul obiect

1.2.1. Clasele

1.2.2. Alcătuirea şi instanţierea unei clase

1.2.3. Definirea unei metode constructor

1.2.4. Utilizarea moştenirii

1.2.5. Redefinirea metodelor

1.2.6. Invocarea unei metode redefinite

1.2.7. Tablouri cu obiecte

Tehnologii WEB

47

10-M

ay-

13

Page 48: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

1.2. Tipul obiect

• Principiul de bază al programării orientate pe obiecte (POO) îl reprezintă încapsularea datelor.

• Un program care nu este orientat spre obiecte este organizat ca un set de funcţii şi un set de variabile globale utilizate de acele funcţii.

• Orice funcţie poate opera folosind orice variabilă globală.

Tehnologii WEB

48

10-M

ay-

13

Page 49: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• Un program orientat spre obiecte combină funcţii şi variabile într-o unitate, cunoscută sub numele de clasă.

• Un program orientat spre obiecte caracteristic este alcătuit din mai multe clase.

• Programele orientate spre obiecte pot fi mai uşor de înţeles decât programele care nu sunt orientate spre obiecte, deoarece interacţiunile între clasele unui program orientat spre obiecte sunt relativ reduse ca număr.

Tehnologii WEB

49

10-M

ay-

13

Page 50: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• Pe lângă încapsularea datelor, o altă caracteristică importantă al POO este moştenirea.

• Moştenirea constă în aceea că putem declara anumite clase ca fiind derivate din alte clase de bază.

• În cele mai multe situaţii clasa derivată (numită şi clasa copil) extinde functionalităţile clasei de bază (numită şi clasa părinte).

• În acest fel se reduce foarte mult cantitatea de cod necesară.

Tehnologii WEB

50

10-M

ay-

13

Page 51: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

curs 8

1.2. Tipul obiect

1.2.1. Clasele

1.2.2. Alcătuirea şi instanţierea unei clase

1.2.3. Definirea unei metode constructor

1.2.4. Utilizarea moştenirii

1.2.5. Redefinirea metodelor

1.2.6. Invocarea unei metode redefinite

1.2.7. Tablouri cu obiecte

Tehnologii WEB

51

10-M

ay-

13

Page 52: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

1.2.1. Clasele

•O clasă este de fapt o structură care conţine variabile (membrii) şi funcţii (metode).

• Metodele sunt operaţiile pe care membrii clasei le pot efectua.

• Membrii şi metodele declarate într-o clasă aparţin clasei respective şi se accesează specificând numele clasei.

Tehnologii WEB

52

10-M

ay-

13

Page 53: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• O clasă poate include o metodă specială, numită "metoda constructor" sau "constructor".

• Metoda constructor este o funcţie care are acelaşi nume cu al clasei şi este folosită pentru a crea instanţe sau membri ai clasei, numiţi "obiecte".

Tehnologii WEB

53

10-M

ay-

13

Page 54: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• Diferenţa între clasă şi obiect este importantă.

• Dacă o clasă poate fi asimilată unui tip de date, un obiect poate fi echivalat:

1. cu o variabilă

2. cu o valoare având un anumit tip de date

• Practic, o clasă este o "fabrică" de obiecte, care produce obiecte cu aceeaşi structură, având proprietăţi şi metode identice.

Tehnologii WEB

54

10-M

ay-

13

Page 55: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

curs 8

1.2. Tipul obiect

1.2.1. Clasele

1.2.2. Alcătuirea şi instanţierea unei clase

1.2.3. Definirea unei metode constructor

1.2.4. Utilizarea moştenirii

1.2.5. Redefinirea metodelor

1.2.6. Invocarea unei metode redefinite

1.2.7. Tablouri cu obiecte

Tehnologii WEB

55

10-M

ay-

13

Page 56: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

1.2.2. Alcătuirea şi instanţierea unei clase

• Definirea unei clase începe cu cuvântul cheie "class".

• Variabilele sau membrii clasei se specifica folosind cuvântul "var".

• Funcţiile sau metodele unei clase se declară specificând cuvântul "function".

Tehnologii WEB

56

10-M

ay-

13

Page 57: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• Clasele au un constructor al clasei adică o metodă care instanţiază o clasă.

• Numele funcţiei constructor este acelaşi cu numele clasei.

• Structura generală de alcătuire a unei clase este următoarea: class nume_clasa { var membru1; var membru2; ................. function nume_functie(); { function metoda1(); function metoda2(); ................. } };

Tehnologii WEB

57

10-M

ay-

13

Page 58: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

Exemplu:

<?php

class ContBanca {

var $sold = 0;

function c_depozit($suma) {

$this->sold = $this->sold + $suma;

}

function obtine_sold() {

return $this->sold;

}

}

?>

Tehnologii WEB

58

10-M

ay-

13

Page 59: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• Clasa "ContBanca" are un singur membru, "$sold" şi două metode: "c_depozit()" şi "obţine_sold()".

• Membru (variabila) "$sold" este definită de o instrucţiune "var".

• Clasa "ContBanca" atribuie variabilei "$sold" valoarea iniţială zero ( Nu este necesară atribuirea unei valori iniţiale unei proprietăţi, dar astfel programele devin mai simple şi mai uşor de citit).

• Cele două metodele sunt definite folosind cuvântul cheie "function". (Diferenţa dintre metode şi funcţii este legată de amplasarea acestora; metodele sunt definite în interiorul claselor, în timp ce funcţiile sunt definite în exteriorul acestora).

Tehnologii WEB

59

10-M

ay-

13

Page 60: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• Instanţierea unei clase se face prin operatorul "new", având următoarea formă generală:

$nume_variabila = new nume_clasa();

• Variabila "$nume_variabila" conţine o referinţă la obiectul clasei "nume_clasa".

• În continuare referirea metodelor clasei se face prin operatorul de referenţiere "->" ca mai jos:

$nume_variabila->Metoda1();

• Variabila apelează metoda cu numele "Metoda1()", care aparţine clasei "nume_clasa".

Tehnologii WEB

60

10-M

ay-

13

Page 61: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• Ştergerea instanţelor unei clase se face simplu prin apelarea funcţiei:

ubset($nume_variabila)

• Dupa această ştergere, orice apel de genul "$nume_variabila->Metoda1();" va fi semnalat ca eroare.

Tehnologii WEB

61

10-M

ay-

13

Page 62: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

Exemplu:

<?php

class ContBanca {

var $sold = 0;

function c_depozit($suma) {

$this->sold = $this->sold + $suma; }

function obtine_sold() {

return $this->sold; }

}

$cont = new ContBanca();

$cont->c_depozit(90);

echo "<br /> Soldul este : ". $cont->obtine_sold();

?>

Tehnologii WEB

62

10-M

ay-

13

Page 63: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• Prima instrucţiune instanţiază un obiect "ContBanca" folosind operatorul "new" şi stochează referinţa la acest obiect în variabila "$cont", care va fi utilizată ulterior pentru a obţine acces la metodele obiectului.

• A doua instrucţiune foloseşte variabila "$cont", (care face referire la obiectul "ContBanca" creat de prima instrucţiune).

• Operatorul "->" arată că PHP trebuie să invoce

metoda "c_depozit()" asupra obiectului desemnat de variabila "$cont".

Tehnologii WEB

63

10-M

ay-

13

Page 64: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• Cea de-a doua instrucţiune invocă metoda "c_depozit()" a obiectului, furnizând argumentului valoarea 90. • După cum este definită, metoda "c_depozit",

aceasta incrementează valoarea membrului "$sold" cu valoarea argumentului din paranteze, "$suma".

• Cea de-a treia instrucţiune invocă metoda "obtine_sold()", care returnează valoarea membrului "$sold". • Instrucţiunea afişează valoarea returnată prin

intermediul unei instrucţiuni "echo", afişând "Soldul este : 90".

Tehnologii WEB

64

10-M

ay-

13

Page 65: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

curs 8

1.2. Tipul obiect

1.2.1. Clasele

1.2.2. Alcătuirea şi instanţierea unei clase

1.2.3. Definirea unei metode constructor

1.2.4. Utilizarea moştenirii

1.2.5. Redefinirea metodelor

1.2.6. Invocarea unei metode redefinite

1.2.7. Tablouri cu obiecte

Tehnologii WEB

65

10-M

ay-

13

Page 66: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

1.2.3. Definirea unei metode constructor

• Pentru ca o clasă să fie eficientă, ar trebui să aibe mai mulţi membri.

• De exemplu, clasa "ContBanca", pe lângă membrul "$sold", ar necesita membri care să definească numele şi id-ul posesorului.

• O nouă versiune a clasei, care include trei membri şi o metodă constructor:

Tehnologii WEB

66

10-M

ay-

13

Page 67: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

<?php class ContBanca { var $cont_id; var $nume_posesor; var $sold = 0; function ContBanca($id, $nume, $suma){ $this->cont_id = $id; $this->nume_posesor = $nume; $this->sold = $suma; } function c_depozit($suma) { $this->sold = $this->sold + $suma; return $this->sold; } } ?>

Tehnologii WEB

67

10-M

ay-

13

Page 68: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• Constructorul este "function ContBanca()", aşa cum se observă, are acelaşi nume ca al clasei.

• PHP apelează automat această funcţie la invocarea operatorului "new".

• Argumentele constructorului sunt folosite pentru a stabili valorile iniţiale ale membrilor noului obiect, "$id", "$nume" şi "$suma".

Tehnologii WEB

68

10-M

ay-

13

Page 69: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

Iată cum s-ar putea folosi noua clasă, adaugăm codul de mai jos după datele de definire a clasei, pe care nu le mai repetăm:

<?php

// Aici sunt adaugate datele pentru definirea clasei

$cont = new ContBanca(8, “Popescu Costica”, 100);

echo "<br /> Contul $cont->cont_id apartine lui $cont->nume_posesor";

$cont->c_depozit(90);

echo "<br /> Soldul este $cont->sold";

?>

Tehnologii WEB

69

10-M

ay-

13

Page 70: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• Instructiunea $cont = new ContBanca(8, “Popescu Costica”,100);

obţine accesul la membrii obiectului în mod direct, transferandu-le valorile "8", "Popescu Costica" şi "100".

• Datele de ieşire ale acestui exemplu sunt urmatoarele:

Contul 8 apartine lui Popescu Costica Soldul este 190

Tehnologii WEB

70

10-M

ay-

13

Page 71: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

curs 8

1.2. Tipul obiect

1.2.1. Clasele

1.2.2. Alcătuirea şi instanţierea unei clase

1.2.3. Definirea unei metode constructor

1.2.4. Utilizarea moştenirii

1.2.5. Redefinirea metodelor

1.2.6. Invocarea unei metode redefinite

1.2.7. Tablouri cu obiecte

Tehnologii WEB

71

10-M

ay-

13

Page 72: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

1.2.4. Utilizarea moştenirii

• Aşa cum s-a explicat la început, un avantaj al programării orientate spre obiecte este facilitatea cunoscută sub numele de moştenire.

• Pentru a înţelege cum funcţionează, prezint un exemplu care arată modul de derivare a unei clase "ContCurent" din clasa de bază "ContBancar", definită anterior şi pe care o salvăm într-un fişier extern "contbanca.php":

Tehnologii WEB

72

10-M

ay-

13

Page 73: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

<?php include("contbanca.php"); class ContCurent extends ContBanca { var $cec_nr; function ContCurent($id, $nume, $suma, $cecnr) { $this->cont_id = $id; $this->nume_posesor = $nume; $this->sold = $suma; $this->cec_nr = $cecnr; } function primire_cec($cecnr, $suma) { $this->sold = $this->sold - $suma; } function obtine_sold() { return $this->sold; } } ?>

Tehnologii WEB

73

10-M

ay-

13

Page 74: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• Exemplul foloseşte o instrucţiune "include" pentru a obţine accesul la definiţia clasei "ContBanca"(ar putea fi plasate şi în acelaşi fişier).

• Cuvântul cheie "extends" stabileşte identitatea clasei "ContCurent" ca fiind derivată a clasei "ContBanca".

• Clasa derivată defineşte: • un membru - "$cec_nr" • un constructor • două metode: "primire_cec()" şi "obtine_sold()"

• Important este că această clasă mai include membrii:

"$cont_id", "$nume_posesor" şi "$sold", care sunt definiţi în clasa de bază, în plus va moşteni şi metoda "c_depozit()".

• Constructorul atribuie valori membrilor moşteniţi, dar şi membrilor noi definiţi în clasa derivată.

Tehnologii WEB

74

10-M

ay-

13

Page 75: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• Cum putem folosi această clasă derivată?

• Creem un obiect "ContCurent", adaugăm datele acestuia după codul de definire a clasei derivate prezentate mai sus:

<?php

// Aici sunt adaugate datele pentru definirea clasei derivate

$cont = new ContCurent(8, "Popescu Costica", 100, 11);

$cont->primire_cec(11, 150);

$cont->c_depozit(250);

echo "<br /> Soldul este". $cont->obtine_sold();

?>

• Se observă că metoda "c_depozit()", care este definită în clasa de bază, este invocată ca şi cum ar fi fost definită în clasa derivată; metodele moştenite nu necesită un tratament de natura specială.

Tehnologii WEB

75

10-M

ay-

13

Page 76: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

curs 8

1.2. Tipul obiect

1.2.1. Clasele

1.2.2. Alcătuirea şi instanţierea unei clase

1.2.3. Definirea unei metode constructor

1.2.4. Utilizarea moştenirii

1.2.5. Redefinirea metodelor

1.2.6. Invocarea unei metode redefinite

1.2.7. Tablouri cu obiecte

Tehnologii WEB

76

10-M

ay-

13

Page 77: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

1.2.5. Redefinirea metodelor

• Uneori, o clasă existentă include o metodă care nu este adecvată pentru o clasă derivată.

• În loc de a defini nouă clasă fără referire la o clasă de bază, se poate anula metoda inadecvată adăugând o metodă cu acelaşi nume în clasa derivată.

• Astfel la instanţiere va fi folosită metoda, cu acelaşi nume, din clasa derivată.

Tehnologii WEB

77

10-M

ay-

13

Page 78: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

<?php class ContBanca2 { var $cont_id; var $nume_posesor; var $sold = 1; function ContBanca2($id, $nume, $suma) { $this->cont_id = $id; $this->nume_posesor = $nume; $this->sold = $suma; } function inchide_cont() { $suma = $this->sold; $this->sold = 1; return $this->sold; } } ?>

Tehnologii WEB

78

10-M

ay-

13

Page 79: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• Să presupunem că dorim să derivăm din aceasta o clasă care reprezintă un nou tip de cont bancar, cu dobândă.

• La închiderea contului, programul trebuie să calculeze dobânda pe care să o adauge la soldul curent şi să returneze suma acumulată.

Tehnologii WEB

79

10-M

ay-

13

Page 80: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

<?php class ContEco extends ContBanca2

{ function inchide_cont($zile, $rata)

{

$suma = $this->sold * $rata * ($zile / 365);

$suma = $suma + $this->sold;

$this->sold = 1;

return $suma;

}

}

?>

Tehnologii WEB

80

10-M

ay-

13

Page 81: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• În cadrul clasei derivată (clasa copil) este definită o metodă numită "inchide_cont()".

• O metodă cu acelasi nume există şi în clasa de bază (clasa parinte), dar are o altă definiţie.

• În continuare creem un obiect "ContEco" şi invocăm metoda inchide_cont() astfel:

<?php // Aici sunt adaugate datele pentru definirea clasei de baza, ContBanca2

// Aici sunt adaugate datele pentru definirea clasei derivate, ContEco

$cont = new ContEco(8, "Didi", 100); echo "<br /> Didi primeste ". $cont->inchide_cont(22, 0.8);

?> Va fi afişat şirul: "Didi primeste 104.82191780822"

• Este invocată metoda "inchide_cont" definită de clasa copil, nu cea definită în clasa părinte.

• Astfel metoda definită în clasa părinte a fost anulată (redefinită) de către metoda, cu acelaşi nume, definită în clasa copil.

Tehnologii WEB

81

10-M

ay-

13

Page 82: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

curs 8

1.2. Tipul obiect

1.2.1. Clasele

1.2.2. Alcătuirea şi instanţierea unei clase

1.2.3. Definirea unei metode constructor

1.2.4. Utilizarea moştenirii

1.2.5. Redefinirea metodelor

1.2.6. Invocarea unei metode redefinite

1.2.7. Tablouri cu obiecte

Tehnologii WEB

82

10-M

ay-

13

Page 83: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

1.2.6. Invocarea unei metode redefinite

• Dacă se încearcă să se invoce o metodă anulată (redefinită), se va obţine o eroare.

• Dacă în exemplul anterior, am fi scris instrucţiunea: "echo "<br /> Didi primeste ". $cont->inchide_cont();", fără cele două argumente (22, 0.8), încercând astfel să se facă referire la metoda anulată "inchide_cont()", s-ar primi mesajele de eroare:

Warning: Missing argument 1 for ContEco::inchide_cont(), Warning: Missing argument 2 for ContEco::inchide_cont()

• Cu toate acestea, este posibilă invocarea metodei redefinite.

• Prin specificarea în clasa copil a numelui clasei parinte, urmat de o pereche de caractere două puncte, (::) şi metoda redefinită.

• Astfel se poate indica scriptului PHP să folosească metoda, cu acelaşi nume, definită în clasa parinte, nu metoda definită în clasa copil.

Tehnologii WEB

83

10-M

ay-

13

Page 84: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• Invocarea unei metode redefinite este un procedeu mai complicat, pentru începători este mai bine a fi evitat deoarece poate complica înţelegerea scriptului.

• Exemplu de clasă derivată care utilizează acest procedeu:

<?php

class ContEco extends ContBanca2 {

function inchide_cont($zile, $rata) {

$suma = ContBanca2::inchide_cont();

$suma = $suma + $suma * $rata * ($zile / 365);

return $suma;

}

}

?>

Tehnologii WEB

84

10-M

ay-

13

Page 85: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

curs 8

1.2. Tipul obiect

1.2.1. Clasele

1.2.2. Alcătuirea şi instanţierea unei clase

1.2.3. Definirea unei metode constructor

1.2.4. Utilizarea moştenirii

1.2.5. Redefinirea metodelor

1.2.6. Invocarea unei metode redefinite

1.2.7. Tablouri cu obiecte

Tehnologii WEB

85

10-M

ay-

13

Page 86: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

1.2.7. Tablouri cu obiecte

• Tablourile (numite şi matrice) reprezintă o

modalitate convenabilă pentru lucrul cu mai multe valori.

• Valorile stocate în tablouri pot face referire la

obiecte exact aşa cum procedează în cazul numerelor sau al şirurilor.

• Un tablou care face referire la obiecte se numeşte "tablou cu obiecte".

Tehnologii WEB

86

10-M

ay-

13

Page 87: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

clasa "ContBanca" şi două clase copil ale acesteia: <?php class ContBanca { var $cont_id; var $nume_posesor; var $sold; var $tip_cont; function ContBanca($id, $nume, $suma, $tip) { $this->cont_id = $id; $this->nume_posesor = $nume; $this->sold = $suma; $this->tip_cont = $tip; } function dump() { return "Cont = ". $this->cont_id. " posesor = ". $this->nume_posesor. " sold = ". $this->sold. " tip = ". $this->tip_cont; } }

Tehnologii WEB

87

10-M

ay-

13

Page 88: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

// Incepe codul pt. prima clasa copil

class ContCurent extends ContBanca { function ContCurent ($id, $nume, $suma) { ContBanca::ContBanca($id, $nume, $suma,

"curent"); } }

// Incepe codul pt. a doua clasa copil class ContEco extends ContBanca { function ContEco ($id, $nume, $suma) { ContBanca::ContBanca($id, $nume, $suma,

"economii"); } } ?>

Tehnologii WEB

88

10-M

ay-

13

Page 89: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• Remarcati faptul ca metodele constructor ale celor doua clase copil fac referire la constructorul clasei parinte, reutilizând în mod eficient caracteristica furnizata de clasa parinte, reducand astfel codul programului.

• Acum, creem instante ale claselor copil si stocam referintele la aceste instante într-un tablou:

<?php $cont[0] = new ContCurent(11, “Popescu Costica",

100); $cont[1] = new ContEco(12, "Didi", 140); ?>

Tehnologii WEB

89

10-M

ay-

13

Page 90: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• De exemplu, dupa ce am definit clasele si am stocat instantele in tabloul "$cont[]" de mai sus, adaugam urmatorul cod:

<?php

// Aici adaugam datele pt. definirea claselor

// Aici adaugam codul pentru stocarea instantelor in tablou

foreach ($cont as $contul) {

echo "<br /> ". $contul->dump();

}

?>

Tehnologii WEB

90

10-M

ay-

13

Page 91: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

• Din moment ce referintele instantelor incluse în tablou se refera la un obiect la care este asociata o metoda "dump()", tabloul este simplu de parcurs, prin invocarea metodei "dump()", care doar afiseaza membrii claselor unui obiect "ContBancar" sau ale unui obiect din una din clasele sale derivate.

• Exemplul va afisa urmatorul rezultat:

Cont = 11 posesor = Popescu Costica sold = 100 tip = curent

Cont = 12 posesor = Didi sold = 140 tip = economii

Tehnologii WEB

91

10-M

ay-

13

Page 92: tehnologii web - runceanu.ro · 2. Utilizarea funcţiei array() •Dacă funcţia array() se apelează fără argumente, va fi creat un tablou vid (fără elemente). •Pentru a crea

Întrebări?

92