 |
|
|
| Autor |
Mesaj |
Flooryn Administrator

Data inscrierii: 02/Oct/2008 Mesaje: 24
|
Trimis: 04/10/2008 20:54 Titlul subiectului: Clase, obiecte si metode in PHP |
|
|
De ce trebuie sa stii ce sunt clasele si obiectele, si cum sa le folosesti
Acest tutorial descrie fundamentele obiectelor si claselor in php 5, de la baze pana la mosteniri.
Ca programator PHP, probabil ca stii sa lucrezi cu funcii si le cunosti ca pe propriul buzunar. Clasele si obiectele reperezinta insa o alta fata a programarii PHP. Este perfect realizabil un intreg sistem / aplicatie fara a fi trebuință sa folosesti o singura clasa. Chiar daca ti-ai propus sa nu te atingi de programarea orientata pe obiecte, nu strica sa stii totusi cu ce se mananca. De exemplu, daca vei folosi o librarie externa, de genul PEAR, vei constata ca trebuie sa instantiezi obiecte si sa apelezi metode.
Ce sunt clasele si metodele ?
Pe scurt, o clasa este o colectie de variabile si metode. In mod normal, aceste componente locuiesc impreuna pentru a servi aceluiasi scop, pentru care au fost scrise. In acest tutorial vom crea o clasa ce va contine metode pentru a popula un dictionar cu termeni si valori.
O clasa poate fi folosita ca un mod elegant de a organiza date si functionalitati, asemanator cu o colectie de functii si variabile. Totusi, este o explicatie prea scurta si care pierde din vedere avantajele utilizarii claselor. Clasele pot fi folosite pentru a genera instante multiple in memorie. Aceste instante sunt numite obiecte. Fiecare obiect dISPune de acelasi set de metode si variabile (proprietati) dar valorile lor difera de la obiect la obiect.
Gandeste-te la o unitate dintr-un joc de strategie - un tanc, de exemplu. O clasa poate pune la dispozitie un set de variabile pentru tanc: aparare si atac, distanta de tragere, sanatate etc. O clasa poate declara si o serie de functii, ca de exemplu move() sau attack(). In timp ce exista o singura clasa Tanc, e poate fi folosita pentru a genera zeci sau sute de obiecte, fiecare cu propria sanatate sau distanta de tragere. Deci o clasa poate fi considerata un sablon pentru a genera obiecte.
Probabil ca cea mai simpla metoda de a intelege acest concept este crearea efectiva a unei clase.
Prima clasa
O clasa este creata întrebuințând cuvantul cheie class. In varianta cea mai simpla, contine cuvantul cheie, un nume si doua acolade
Numele clasei poate contine orice combinatie de litere si cifre, caracterul underscore _ , dar nu poate incepe cu o cifra.
Clasa creata mai sus este perfecta, desi nu poate fi folosita, inca, la nimic. Pentru a utiliza aceasta clasa, cream obiectele
| Cod: | $obiect1 = new Dictionar();
$obiect2 = new Dictionar();
$obiect3 = new Dictionar($argument, $alt_argument);
|
In forma, cel putin, instantierea unui obiect este asemanatoare cu apelarea unei functii. Ca si la functii, unele clase necesita sa le transmiti argumente. De asemenea, trebuie sa folosesti cuvantul cheie new. Astfel ii spui interpretorului PHP ca declari un obiect nou. Obiectul nou realizat poate fi stocat intr-o variabila, pentru utilizari ulterioare.
Proprietati
In corpul unei clase, poti declara variabile speciale, numite proprietati. In PHP 4 acestea trebuiau declarate cu cuvantul cheie var in fata
| Cod: | /**
* PHP versiunea 4
*/
class Dictionar {
var $traduceri = array();
var $tip = "Ro";
}
|
Aceasta sintaxa este in continuare acceptata (in PHP 5), dar doar pentru a asigura compatibilitate cu versiuni anterioare de PHP.
In PHP 5, proprietatile pot fi declarate ca publice, private sau protejate
| Cod: | /**
* PHP versiunea 5
*/
class Dictionar {
public $traduceri = array();
public $tip = "Ro";
}
|
Dupa cum se poate vedea, poti sa declari o proprietate si sa ii asociezi o valoare in acelsi timp. Poti "trage cu ochiul" la dispoziția unui obiect utilizând functia print_r()
| Cod: | $ro = new Dictionar();
print_r($ro);
|
va afisa pe ecran
| Cod: | Dictionar Object
(
[traduceri] => Array
(
)
[tip] => Ro
)
|
Poti accesa proprietatile obiectelor folosind operatorul "->". Ca atare, "$ro->tip" inseamna proprietate $tip din obiectul Dictionar referentiat de "$ro". Daca poti accesa o proprietate, inseamna ca poti sa ii obtii / setezi si valoarea. Codul urmator instantiaza doua obiecte Dictionar. Modifica proprietatea $tip la unul dintre obiecte si adauga traduceri la amandoua.
| Cod: | $ro = new Dictionar();
$ro->traduceri['COPAC'] = "copac";
$en = new Dictionar();
$en->tip = "En";
$en->traduceri['COPAC'] = "tree";
foreach ( array( $ro, $en ) as $dict ) {
print "tip: " . $dict->tip;
print "COPAC: " . $dict->traduceri['COPAC'] . "";
}
|
Scriptul de mai sus va returna
| Cod: | tip: Ro COPAC: copac
tip: En COPAC: tree
|
Acum clasa Dictionar a inceput sa devin utila. Obiecte individuale pot stoca seturi diferite de chei si valori, ca de altfel si identificatorul care ii spune userului mai multe despre ce tip de dictionar este.
Desi clasa Dictionar este in momentul de fata un pic mai mult decat o serie de array-uri asociative, exista un indiciu catre forța obiectelor aici. In stadiul actual, putem reprezenta codul nostru, la fel de bine, si astfel:
| Cod: | $ro = array(
'traduceri'=>array( 'COPAC' => 'copac' ),
'tip'=>'Ro'
);
$en = array(
'traduceri'=>array( 'COPAC' => 'tree' ),
'tip'=>'En'
);
|
Desi structura de mai sus indeplineste riguros acelasi scop ca si clasa Dictionar, nu garanteaza insa structura. Daca ai trimis un obiect Dictionar, stii sigur ca acesta are proprietatea $traduceri. Intr-un array (tablou) asociativ, nu mai exista aceeasi garantie. Acest fapt face o cerere de forma $en['traduceri']['COPAC']; sa rateze intr-un fel sau altul, exceptand cazul in care codul ce genereaza cererea este absolut sigur de provenienta array-ului respectiv.
Desi sunt recompense in stocarea datelor in obiecte, ratam o intreaga dimensiune. Obiectele pot FI lucruri, intr-adevar, dar crucial este ca ele pot FACE lucruri |
|
| Sus |
|
 |
misanchik Junior

Data inscrierii: 21/Iul/2012 Mesaje: 5 Localitate: Bulgaria
|
Trimis: 09/08/2012 03:11 Titlul subiectului: |
|
|
| Just to say thanks for your article I think it is not enough)) Get away from me a few smiles in gratitude. |
|
| Sus |
|
 |
|
|
Nu puteti crea un subiect nou in acest forum Nu puteti raspunde in subiectele acestui forum Nu puteti modifica mesajele proprii din acest forum Nu puteti sterge mesajele proprii din acest forum Nu puteti vota in chestionarele din acest forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|
|
|