top

Clase, obiecte si metode in PHP

 
Creaza un subiect nou   Raspunde la subiect    Pagina de start a forumului clickro.MyForum.ro -> PHP
Autor Mesaj
Flooryn
Administrator
Administrator


Data inscrierii: 02/Oct/2008
Mesaje: 24

MesajTrimis: 04/10/2008 20:54    Titlul subiectului: Clase, obiecte si metode in PHP Raspunde cu citat (quote)

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
Cod:
class Dictionar {
 
  }

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
Vezi profilul utilizatorului Trimite mesaj privat
misanchik
Junior
Junior


Data inscrierii: 21/Iul/2012
Mesaje: 5
Localitate: Bulgaria

MesajTrimis: 09/08/2012 03:11    Titlul subiectului: Raspunde cu citat (quote)

Just to say thanks for your article I think it is not enough)) Get away from me a few smiles in gratitude.
Sus
Vezi profilul utilizatorului Trimite mesaj privat
Afiseaza mesajele pentru a le previzualiza:    Subiectul anterior : Subiectul urmator  
Creaza un subiect nou   Raspunde la subiect    Pagina de start a forumului clickro.MyForum.ro -> PHP Ora este GMT + 2 ore
Pagina 1 din 1

 
Mergi direct la:  
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

Fa-ti si tu propriul forum GRATUIT, pe www.myforum.ro