Sunteți pe pagina 1din 15

Tehnologii WEB

Cursul 11

Limbajul PHP

Tipuri de date compuse
In PHP sunt utilizate doua tipuri de date compuse:
1. tipul tablou;
2. Tipul obiect.

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).
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
Un element al unui tablou este precizat indicnd numele tabloului i cheia (numit i
indexul elementului).
Cheile pot fi:
1. numere ntregi (tabloul corespunztor este de tip numeric)
2. 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

Crearea tablourilor
Exist urmtoarele 3 modaliti de creare a unui tablou:
1. prin atribuire direct
2. folosind funcia array()
3. preciznd cheile odat cu utilizarea funciei array()

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;

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

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

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

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.

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 numericesau iruri.
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".

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

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

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)
{
de instruciuni
}

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 $valoareprin 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.
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
*/
?>

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

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];
. . .

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


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

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.
Argumentul opional parametru este utilizat pentru a schimba comportamentul funciei
la sortare i poate avea ca valoare urmtoarele 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)

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 />";
}
}
sorteaza($alfanumeric);
/* Se va afisa:
tablou[0]=A
tablou[1]=B
tablou[2]=a
tablou[3]=5
tablou[4]=100
*/
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
*/
?>

Transformarea tablourilor
n PHP sunt definite o serie de funcii utilizate pentru transformarea tablourilor.
Prin transformare se nelege:
1. unirea tablourilor
2. extragerea/eliminarea unor poriuni din acestea

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.

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

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

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

Clasele
O 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.
O 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".
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.

Alctuirea i instanierea unei clase
Definirea unei clase ncepe cu cuvntul cheie "class".
Variabilele sau membrii clasei se specifica folosind cuvntul "var".
Funciile sau metodele unei clase se declar specificnd cuvntul "function".
Clasele au un constructor al clasei adic o metod care instaniaz o clas.
Numele funciei constructor este acelai cu numele clasei.
Structura general de alctuire a unei clase este urmtoarea:
class nume_clasa {
var membru1;
var membru2;
.................
function nume_functie(); {
function metoda1();
function metoda2();
.................
}
};

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

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).
Instanierea unei clase se face prin operatorul "new", avnd urmtoarea form
general:
$nume_variabila = new nume_clasa();

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".
tergerea instanelor unei clase se face simplu prin apelarea funciei:
ubset($nume_variabila)
Dupa aceast tergere, orice apel de genul "$nume_variabila->Metoda1();" va fi
semnalat ca eroare.
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();
?>

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).
Operatorul "->" arat c PHP trebuie s invoce metoda "c_depozit()" asupra obiectului
desemnat de variabila "$cont".
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".

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

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

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

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

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

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

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.
<?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;
}
}
?>
`
Invocarea unei metode redefinite
Dac 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()

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

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 aa cum procedeaz n
cazul numerelor sau al irurilor. Un tablou care face referire la obiecte se numete "tablou cu
obiecte".
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;
}
}
// 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");
}
}
?>

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:
<?php
$cont[0] = new ContCurent(11, Popescu Costica",
100);
$cont[1] = new ContEco(12, "Didi", 140);
?>

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

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

S-ar putea să vă placă și