Sunteți pe pagina 1din 92

Universitatea Constantin Brncui din Trgu-Jiu Facultatea de Inginerie Departamentul de Automatic, Energie i Mediu

Tehnologii Web

Lector univ. dr. Adrian Runceanu

Curs 8

Limbajul PHP (partea III)


2

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
3 Tehnologii WEB

curs 8
1.2. Tipul obiect 1.2.1. Clasele 1.2.2. Alctuirea i instanierea unei clase 1.2.3. Definirea unei metode constructor 1.2.4. Utilizarea motenirii 1.2.5. Redefinirea metodelor 1.2.6. Invocarea unei metode redefinite 1.2.7. Tablouri cu obiecte
4 Tehnologii WEB

Tipuri de date compuse

n PHP sunt utilizate dou tipuri de date compuse:


1.

tipul tablou tipul obiect

2.

5 Tehnologii WEB

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
6 Tehnologii WEB

1.1. Tipul tablou


Tipul tablou se refer la colecii 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 manipulrii acestora (sortare).
7 Tehnologii WEB

De asemenea, funciile care extrag rezultatele obinute n urma interogrii 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

Un element al unui tablou este precizat indicnd numele tabloului i cheia (numit i indexul elementului). Cheile pot fi:

1. 2.

numere ntregi (tabloul corespunztor este de tip numeric) iruri de caractere (tabloul corespunztor este de tip asociativ)

Cheile avnd ultimul tip precizat trebuie incluse ntre ghilimele sau apostrofuri. Exemple: $note['matematica'] = 9 sau $note["matematica"]= 9

9 Tehnologii WEB

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
10 Tehnologii WEB

1.1.1. Crearea tablourilor

Exist urmtoarele 3 modaliti de creare a unui tablou:


1.

prin atribuire direct

2.

folosind funcia array()


preciznd cheile odat cu utilizarea funciei array()
Tehnologii WEB

3.

11

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;

12 Tehnologii WEB

n exemplul oferit, PHP creeaz automat un tablou cu trei elemente. Este important de menionat c elementele tabloului $elev pot fi indicate ulterior preciznd cheia de tip ir de caractere i/sau cheia numeric. Cheile numerice primesc automat valori ntregi succesive, prima fiind 0.

13 Tehnologii WEB

10-May-13

De exemplu, vrsta unui elev poate fi precizat n urmtoarele 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 urmtor): $elev["clasa"]=11;

14 Tehnologii WEB

10-May-13

Pentru crearea unui tablou prin atribuire direct, pot fi precizate i chei numerice, ca n exemplul urmtor:
$orase[0]="Bucuresti"; $orase[1]="Iasi"; $orase[2]="Timisoara";

15 Tehnologii WEB

10-May-13

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 urmtor: $tariUE[]="Franta"; $tariUE[]="Germania"; $tariUE[]="Romania"; n acest exemplu, PHP creeaz automat tabloul $tariUE, atribuind elementelor acestuia chei numerice succesive, ncepnd cu valoarea 0 (adic 0, 1 i 2).

16

Tehnologii WEB

10-May-13

2. Utilizarea funciei array()


Dac funcia array() se apeleaz fr argumente, va fi creat un tablou vid (fr elemente). Pentru a crea un tablou nevid, valorile elementelor acestuia trebuie precizate ca argumente, sub forma unei liste ale crei componente sunt separate prin caracterul virgul, ca n exemplul prezentat n continuare: $orase=array("Bucuresti", "lasi", "Timisoara"); Valorile precizate ca argumente ale funciei vor fi stocate ca elemente n tabloul $orase, n ordinea precizrii lor, cheile acestora avnd valori ntregi succesive ncepnd cu 0.

17 Tehnologii WEB

10-May-13

3. Precizarea cheilor
PHP

ofer posibilitatea de a preciza cheile elementelor odat cu crearea unui tablou prin intermediul funciei array(). n acest caz, este necesar ca argumentele funciei 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.
18

Tehnologii WEB

10-May-13

Exemplu n care cheile sunt numerice: $orase=array(0=>"Bucuresti", 1=>"Iasi", 2=>"Timisoara"); Dac se dorete 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".
19

Tehnologii WEB

10-May-13

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
20 Tehnologii WEB

10-May-13

1.1.2. Tablouri multidimensionale

n exemplele anterioare, pentru a ilustra cele trei metode de creare a tablourilor, au fost utilizate tablouri unidimensionale. Dei acestea sunt mai rar utilizate, PHP ofer i posibilitatea de a crea tablouri multidimensionale.

21

Tehnologii WEB

10-May-13

n continuare este prezentat un exemplu n care este creat un tablou bidimensional, prin intermediul funciei array(): $note=array ('sem1' => array('matematica'=>9, 'fizica'=>9, 'informatica'=>10), 'sem2'=> array('matematica' =>9, 'fizica'=>8, 'informatica'=>9) );
22

Tehnologii WEB

10-May-13

Acelai tablou poate fi creat prin atribuire direct n felul urmtor: $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 cnd este posibil, tablourile multidimensionale se vor crea folosind instruciunile repetitive (de exemplu instruciunea for).
23

Tehnologii WEB

10-May-13

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
24 Tehnologii WEB

10-May-13

1.1.3. Parcurgerea tablourilor


Exist diverse modaliti pentru a parcurge elementele unui tablou (operaie cunoscut i sub denumirea de traversarea tabloului), cea mai elegant dintre acestea constnd n utilizarea instruciunii foreach, cu urmtoarea sintax: foreach($tablou as [$cheie=>] [&] $valoare) { grup de instruciuni }
25 Tehnologii WEB

10-May-13

Variabila $cheie este opional i, atunci cnd este specificat, conine cheia elementului curent. De asemenea, caracterul &" este opional i, atunci cnd este prezent, permite modificarea explicit a valorii elementului $valoare prin intermediul instruciunilor incluse n grupul grup) i transmiterea automat a valorii ctre tablou ($tablou). n cele mai multe cazuri, nu se dorete modificarea valorii elementelor, astfel nct caracterul &" nu se folosete.

26

Tehnologii WEB

10-May-13

Exemplu n care se utilizeaz instruciunea 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 */ ?>
27 Tehnologii WEB

10-May-13

O alt modalitate de parcurgere a elementelor unui tablou consta n utilizarea funciilor list() i each(), ca n exemplul urmtor: <?php $orase=array("Bucuresti", "lasi", "Timisoara"); echo "Orase romanesti:<br />"; reset($orase); while (list($cheie, $valoare) = each($orase)) { echo "$cheie=$valoare<br />"; } ?>

28 Tehnologii WEB

10-May-13

Funcia list() permite atribuirea simultan de valori mai multor variabile utiliznd elementele unui tablou: list(Svariabila1, $variabila2, ...) = $tablou; Ca rezultat al execuiei instruciunii anterioare, variabilelor $variabila1, $variabila2, ... li se vor atribui valorile elementelor $tablou[0], $tablou[1], ... , echivalent cu a realiza urmtoarele atribuiri: $variabila1 = $tablou[0]; $variabila2 = $tablou[1]; ...

29 Tehnologii WEB

10-May-13

Funcia

each() ntoarce perechea cheievaloare curent a tabloului primit ca argument i deplaseaz pointerul intern la urmtorul element. Perechea ntoars este, de fapt, un tablou cu patru elemente: cele avnd cheile 0 i "key" pstreaz cheia elementului iar cele avnd cheile 1 i "value" pstreaz valoarea acestuia
30

Tehnologii WEB

10-May-13

Pentru

traversarea unui tablou este utilizat un pointer (numrator) intern al acestuia care nregistreaz poziia curent.
Dac se folosete funcia each() pentru parcurgerea unui tablou, spre deosebire de instruciunea foreach, este necesar ca n prealabil s se apeleze funcia reset(), care va muta pointerul intern la nceputul tabloului.
10-May-13 Tehnologii WEB

31

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
32 Tehnologii WEB

10-May-13

1.1.4. Sortarea tablourilor


Pentru sortarea tablourilor sunt utilizate o serie de funcii dintre, care menionm: 1. sort() sorteaz ascendent un tablou n funcie de valoarea elementelor 2. rsort() sorteaz descendent un tablou n funcie de valoarea elementelor 3. asort() sorteaz ascendent un tablou asociativ n funcie de valoarea elementelor 4. arsort() sorteaz descendent un tablou asociativ n funcie de valoarea elementelor 5. ksort() - sorteaz ascendent un tablou n funcie de cheie 6. krsort() - sorteaz descendent un tablou n funcie de cheie
33 Tehnologii WEB

10-May-13

Prototipul sort() este urmtorul: bool sort(array tablou [, int parametru])

Dup cum se poate observa, funcia sort() primete ca argument obligatoriu numele unui tablou pe care l va sorta ascendent, n funcie de valorile elementelor sale.

34 Tehnologii WEB

10-May-13

argumentul opional parametru este utilizat pentru a schimba comportamentul funciei la sortare i poate avea ca valoare urmtoarele constante:
1.

2.
3.

sort_regular (valoare implicit) - elementele sunt comparate normal sort_numeric - elementele sunt comparate din punct de vedere numeric sort_string - elementele sunt comparate ca iruri de caractere codul ASCII al primului caracter/cifr)

35 Tehnologii WEB

10-May-13

Funcia sort() ntoarce valoarea true, n caz de succes, i false n cazul n care sortarea nu s-a produs. n primul caz, funcia 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 />"; } }
36

Tehnologii WEB

10-May-13

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

37 Tehnologii WEB

10-May-13

38

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

10-May-13

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
39 Tehnologii WEB

10-May-13

1.1.5. Transformarea tablourilor

Prin transformare se nelege: 1. unirea tablourilor 2. extragerea/eliminarea unor poriuni din acestea
40 Tehnologii WEB

10-May-13

n PHP sunt definite o serie de funcii utilizate pentru transformarea tablourilor.

1. Unirea tablourilor
Pentru unirea a dou sau mai multe tablouri ntr-unul singur, se utilizeaz funcia array_merge() al crei prototip este urmtorul: array array_merge(array tablou1 [, array tablou2 [, array ]]) Funcia reunete elementele tablourilor precizate ca argumente, astfel nct elementele unuia sunt adugate la sfritul celui anterior, ntorcnd tabloul rezultat. Dac unele elemente au aceleai chei de tip ir de caractere, ultima valoare o va suprascrie pe cea anterioar. Nu acelai lucru se ntmpl cu cheile numerice.

41 Tehnologii WEB

10-May-13

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 ) */ ?>

42

Tehnologii WEB

10-May-13

2. Extragerea unei poriuni dintr-un tablou


Funcia array_slice(), care extrage o poriune dintr-un tablou, are urmtorul prototip: array array_slice(array tablou, int offset [, int lungime [, bool pastreazacheile ]] ) Aceasta funcie extrage din tablou, elementele precizate prin intermediul argumentelor offset i lungime. Dac offset nu este negativ, secvena de elemente extrase ncepe cu cel avnd poziia offset n raport cu nceputul tabloului. Dac acest argument este negativ, poziia primului element extras va fi calculat n raport cu sfritul tabloului. Dac argumentul lungime nu este precizat, vor fi extrase toate elementele pn la sfritul tabloului.

43 Tehnologii WEB

10-May-13

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 ) */
44 Tehnologii WEB

10-May-13

$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 ) */
45

Tehnologii WEB

10-May-13

46

$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

10-May-13

curs 8
1.2. Tipul obiect 1.2.1. Clasele 1.2.2. Alctuirea i instanierea unei clase 1.2.3. Definirea unei metode constructor 1.2.4. Utilizarea motenirii 1.2.5. Redefinirea metodelor 1.2.6. Invocarea unei metode redefinite 1.2.7. Tablouri cu obiecte
47 Tehnologii WEB

10-May-13

1.2. Tipul obiect


Principiul

de baz al programrii orientate pe obiecte (POO) l reprezint ncapsularea datelor. Un program care nu este orientat spre obiecte este organizat ca un set de funcii i un set de variabile globale utilizate de acele funcii. Orice funcie poate opera folosind orice variabil global.
48

Tehnologii WEB

10-May-13

Un

program orientat spre obiecte combin funcii i variabile ntr-o unitate, cunoscut sub numele de clas. Un program orientat spre obiecte caracteristic este alctuit din mai multe clase. Programele orientate spre obiecte pot fi mai uor de neles dect programele care nu sunt orientate spre obiecte, deoarece interaciunile ntre clasele unui program orientat spre obiecte sunt relativ reduse ca numr.
49

Tehnologii WEB

10-May-13

Pe

lng ncapsularea datelor, o alt caracteristic important al POO este motenirea. Motenirea const n aceea c putem declara anumite clase ca fiind derivate din alte clase de baz. n cele mai multe situaii clasa derivat (numit i clasa copil) extinde functionalitile clasei de baz (numit i clasa printe). n acest fel se reduce foarte mult cantitatea de cod necesar.
50

Tehnologii WEB

10-May-13

curs 8
1.2. Tipul obiect 1.2.1. Clasele 1.2.2. Alctuirea i instanierea unei clase 1.2.3. Definirea unei metode constructor 1.2.4. Utilizarea motenirii 1.2.5. Redefinirea metodelor 1.2.6. Invocarea unei metode redefinite 1.2.7. Tablouri cu obiecte
51 Tehnologii WEB

10-May-13

1.2.1. Clasele

clas este de fapt o structur care conine variabile (membrii) i funcii (metode).

Metodele

sunt operaiile pe care membrii clasei le pot efectua. Membrii i metodele declarate ntr-o clas aparin clasei respective i se acceseaz specificnd numele clasei.
52 Tehnologii WEB

10-May-13

clas poate include o metod special, numit "metoda constructor" sau "constructor". Metoda constructor este o funcie care are acelai nume cu al clasei i este folosit pentru a crea instane sau membri ai clasei, numii "obiecte".

53 Tehnologii WEB

10-May-13

Diferena

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 avnd un anumit tip de date Practic, o clas este o "fabric" de obiecte, care produce obiecte cu aceeai structur, avnd proprieti i metode identice.

54 Tehnologii WEB

10-May-13

curs 8
1.2. Tipul obiect 1.2.1. Clasele 1.2.2. Alctuirea i instanierea unei clase 1.2.3. Definirea unei metode constructor 1.2.4. Utilizarea motenirii 1.2.5. Redefinirea metodelor 1.2.6. Invocarea unei metode redefinite 1.2.7. Tablouri cu obiecte
55 Tehnologii WEB

10-May-13

1.2.2. Alctuirea i instanierea unei clase

Variabilele sau membrii clasei se specifica folosind cuvntul "var".

Funciile sau metodele unei clase se declar specificnd cuvntul "function".


Tehnologii WEB

56

10-May-13

Definirea unei clase ncepe cu cuvntul cheie "class".

Clasele au un constructor al clasei adic o metod care instaniaz o clas. Numele funciei constructor este acelai cu numele clasei.
10-May-13

Structura general de alctuire a unei clase este urmtoarea: class nume_clasa { var membru1; var membru2; ................. function nume_functie(); { function metoda1(); function metoda2(); ................. } };
57

Tehnologii WEB

Exemplu: <?php class ContBanca { var $sold = 0; function c_depozit($suma) { $this->sold = $this->sold + $suma; } function obtine_sold() { return $this->sold; } } ?>
58

Tehnologii WEB

10-May-13

Clasa "ContBanca" are un singur membru, "$sold" i dou metode: "c_depozit()" i "obine_sold()". Membru (variabila) "$sold" este definit de o instruciune "var". Clasa "ContBanca" atribuie variabilei "$sold" valoarea iniial zero ( Nu este necesar atribuirea unei valori iniiale unei proprieti, dar astfel programele devin mai simple i mai uor de citit).
Cele dou metodele sunt definite folosind cuvntul cheie "function". (Diferena dintre metode i funcii este legat de amplasarea acestora; metodele sunt definite n interiorul claselor, n timp ce funciile sunt definite n exteriorul acestora).
Tehnologii WEB

59

10-May-13

Instanierea unei clase se face prin operatorul "new", avnd urmtoarea form general: $nume_variabila = new nume_clasa();
10-May-13

Variabila "$nume_variabila" conine o referin la obiectul clasei "nume_clasa". n continuare referirea metodelor clasei se face prin operatorul de refereniere "->" ca mai jos: $nume_variabila->Metoda1();

Variabila apeleaz metoda cu numele "Metoda1()", care aparine clasei "nume_clasa".


Tehnologii WEB

60

tergerea

instanelor unei clase se face simplu prin apelarea funciei: ubset($nume_variabila)


10-May-13 Tehnologii WEB

Dupa

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

61

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

62 Tehnologii WEB

10-May-13

Prima instruciune instaniaz un obiect "ContBanca" folosind operatorul "new" i stocheaz referina la acest obiect n variabila "$cont", care va fi utilizat ulterior pentru a obine acces la metodele obiectului.
A doua instruciune folosete variabila "$cont", (care face referire la obiectul "ContBanca" creat de prima instruciune).
10-May-13 Tehnologii WEB

Operatorul "->" arat c PHP trebuie s invoce metoda "c_depozit()" asupra obiectului desemnat de variabila "$cont".

63

Cea de-a doua instruciune invoc metoda "c_depozit()" a obiectului, furniznd 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 instruciune invoc metoda "obtine_sold()", care returneaz valoarea membrului "$sold". Instruciunea afieaz valoarea returnat prin intermediul unei instruciuni "echo", afind "Soldul este : 90".
Tehnologii WEB 10-May-13

64

curs 8
1.2. Tipul obiect 1.2.1. Clasele 1.2.2. Alctuirea i instanierea unei clase 1.2.3. Definirea unei metode constructor 1.2.4. Utilizarea motenirii 1.2.5. Redefinirea metodelor 1.2.6. Invocarea unei metode redefinite 1.2.7. Tablouri cu obiecte
65 Tehnologii WEB

10-May-13

1.2.3. Definirea unei metode constructor

Pentru ca o clas s fie eficient, ar trebui s aibe mai muli membri. De exemplu, clasa "ContBanca", pe lng 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:
10-May-13 Tehnologii WEB

66

<?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; } } ?>
67

Tehnologii WEB

10-May-13

Constructorul

este "function ContBanca()", aa cum se observ, are acelai nume ca al clasei.


PHP apeleaz automat aceast funcie la invocarea operatorului "new". Argumentele constructorului sunt folosite pentru a stabili valorile iniiale ale membrilor noului obiect, "$id", "$nume" i "$suma".
10-May-13 Tehnologii WEB

68

Iat cum s-ar putea folosi noua clas, adaugm codul de mai jos dup datele de definire a clasei, pe care nu le mai repetm: <?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"; ?>
69

Tehnologii WEB

10-May-13

Instructiunea $cont = new ContBanca(8, Popescu Costica,100); obine accesul la membrii obiectului n mod direct, transferandu-le valorile "8", "Popescu Costica" i "100".
Datele de ieire ale acestui exemplu sunt urmatoarele:

Contul 8 apartine lui Popescu Costica Soldul este 190


70 Tehnologii WEB

10-May-13

curs 8
1.2. Tipul obiect 1.2.1. Clasele 1.2.2. Alctuirea i instanierea unei clase 1.2.3. Definirea unei metode constructor 1.2.4. Utilizarea motenirii 1.2.5. Redefinirea metodelor 1.2.6. Invocarea unei metode redefinite 1.2.7. Tablouri cu obiecte
71 Tehnologii WEB

10-May-13

1.2.4. Utilizarea motenirii

Aa cum s-a explicat la nceput, un avantaj al programrii orientate spre obiecte este facilitatea cunoscut sub numele de motenire. Pentru a nelege cum funcioneaz, prezint un exemplu care arat modul de derivare a unei clase "ContCurent" din clasa de baz "ContBancar", definit anterior i pe care o salvm ntr-un fiier extern "contbanca.php":
10-May-13

72 Tehnologii WEB

<?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; } } ?>

73 Tehnologii WEB

10-May-13

Exemplul folosete o instruciune "include" pentru a obine accesul la definiia clasei "ContBanca"(ar putea fi plasate i n acelai fiier).
Cuvntul cheie "extends" stabilete identitatea clasei "ContCurent" ca fiind derivat a clasei "ContBanca". Clasa derivat definete: un membru - "$cec_nr" un constructor dou metode: "primire_cec()" i "obtine_sold()"
10-May-13 Tehnologii WEB

Important este c aceast clas mai include membrii: "$cont_id", "$nume_posesor" i "$sold", care sunt definii n clasa de baz, n plus va moteni i metoda "c_depozit()". Constructorul atribuie valori membrilor motenii, dar i membrilor noi definii n clasa derivat.

74

Cum putem folosi aceast clas derivat? Creem un obiect "ContCurent", adaugm 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 motenite nu necesit un tratament de natura special.

75

Tehnologii WEB

10-May-13

curs 8
1.2. Tipul obiect 1.2.1. Clasele 1.2.2. Alctuirea i instanierea unei clase 1.2.3. Definirea unei metode constructor 1.2.4. Utilizarea motenirii 1.2.5. Redefinirea metodelor 1.2.6. Invocarea unei metode redefinite 1.2.7. Tablouri cu obiecte
76 Tehnologii WEB

10-May-13

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 fr referire la o clas de baz, se poate anula metoda inadecvat adugnd o metod cu acelai nume n clasa derivat. Astfel la instaniere va fi folosit metoda, cu acelai nume, din clasa derivat.

77 Tehnologii WEB

10-May-13

<?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; } } ?>

78 Tehnologii WEB

10-May-13

S presupunem c dorim s derivm din aceasta o clas care reprezint un nou tip de cont bancar, cu dobnd. La nchiderea contului, programul trebuie s calculeze dobnda pe care s o adauge la soldul curent i s returneze suma acumulat.

79 Tehnologii WEB

10-May-13

<?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; } } ?>
80

Tehnologii WEB

10-May-13

81

continuare creem un obiect "ContEco" i invocm 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-

Tehnologii WEB

10-May-13

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

curs 8
1.2. Tipul obiect 1.2.1. Clasele 1.2.2. Alctuirea i instanierea unei clase 1.2.3. Definirea unei metode constructor 1.2.4. Utilizarea motenirii 1.2.5. Redefinirea metodelor 1.2.6. Invocarea unei metode redefinite 1.2.7. Tablouri cu obiecte
82 Tehnologii WEB

10-May-13

1.2.6. Invocarea unei metode redefinite


Dac

83

se ncearc s se invoce o metod anulat (redefinit), se va obine o eroare. Dac n exemplul anterior, am fi scris instruciunea: "echo "<br /> Didi primeste ". $cont->inchide_cont();", fr cele dou argumente (22, 0.8), ncercnd 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()

Tehnologii WEB

10-May-13

Invocarea unei metode redefinite este un procedeu mai complicat, pentru nceptori este mai bine a fi evitat deoarece poate complica nelegerea 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; } } ?>

84 Tehnologii WEB

10-May-13

curs 8
1.2. Tipul obiect 1.2.1. Clasele 1.2.2. Alctuirea i instanierea unei clase 1.2.3. Definirea unei metode constructor 1.2.4. Utilizarea motenirii 1.2.5. Redefinirea metodelor 1.2.6. Invocarea unei metode redefinite 1.2.7. Tablouri cu obiecte
85 Tehnologii WEB

10-May-13

1.2.7. Tablouri cu obiecte

Valorile stocate n tablouri pot face referire la obiecte exact aa cum procedeaz n cazul numerelor sau al irurilor. Un tablou care face referire la obiecte se numete "tablou cu obiecte".
Tehnologii WEB

86

10-May-13

Tablourile (numite i matrice) reprezint o modalitate convenabil pentru lucrul cu mai multe valori.

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; } }
87

Tehnologii WEB

10-May-13

clasa "ContBanca" i dou clase copil ale acesteia: <?php class ContBanca { var $cont_id; var $nume_posesor; var $sold; var $tip_cont;

// 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"); } } ?>
88 Tehnologii WEB

10-May-13

Remarcati faptul ca metodele constructor ale celor doua clase copil fac referire la constructorul clasei parinte, reutiliznd 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:
10-May-13 Tehnologii WEB

<?php $cont[0] = new ContCurent(11, Popescu Costica", 100); $cont[1] = new ContEco(12, "Didi", 140); ?>
89

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

<?php // Aici adaugam datele pt. definirea claselor // Aici adaugam codul pentru stocarea instantelor in tablou foreach ($cont as $contul) { echo "<br /> ". $contul->dump(); } ?>
90

Tehnologii WEB

Exemplul va afisa urmatorul rezultat:

Cont = 11 posesor = Popescu Costica sold = 100 tip = curent Cont = 12 posesor = Didi sold = 140 tip = economii

91 Tehnologii WEB

10-May-13

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.

ntrebri?

92