Curs Php-mysql

1. Metoda Accesor

Variabilele (proprietatile) create intr-o clasa pot avea de la inceput o valoare sau pot fi doar simplu declarate, urmand ca valoarea lor sa fie atribuita prin intermediul unei functii (metode). Aceasta functie e denumita generic Metoda Accessor, e la fel ca oricare alta metoda, doar ca scopul ei este de a atribui valori proprietatilor; in rest, se construieste si se apeleaza la fel ca celelalte.
Ca sa vedeti cum functioneaza "metoda accessor", incercati urmatorul exemplu, in care este creata o clasa "SiteClas" cu doua proprietati ('site' si 'categorie'), ambele fara valoare, iar metoda Constructor e folosita si ca accesor, atribuie valori proprietatilor prin parametri ei.

<?php
// Se defineste clasa SiteClas
class SiteClas {
  public $site;          // Proprietate declarata fara valoare
  private $categorie;          // Proprietate privata, fara valoare

  // Constructor
  public function __construct($site, $categorie) {
    // Atribuie proprietatilor valoarea din parametri
    $this->site = $site;
  $this->categorie = $categorie;
  }

  // Metoda pt. afisare adresa pagini
  public function pagini($pag) {
    // Afiseaza un sir cu adresa URL, www., valoarea celor 2 proprietati si argumentul primit
  echo '<br />www.'. $this->site.'/'. $this->categorie.'/'. $pag;
  }
}
?>
- Cand e creata instanta de obiect la clasa, metoda constructor (care se executa automat) atribuie proprietatilor "site" si "categorie" valorile din parametri, care trebuie adaugate la crearea instantei.
- Metoda pagini(), cand e apelata, afiseaza o adresa URL formata din valoarea proprietatilor "site", "categorie" (atribuite prin constructor) si argumentul ei $pag.
- Salvam clasa intr-un fisier denumit "class.SiteClass.php", iar pentru test, se adauga urmatorul cod intr-un fisier .php salvat in acelasi director unde e si clasa.
<?php
include('class.SiteClas.php');        // Include clasa

// Creare instanta de obiect la clasa SiteClas, cu argumentele necesare
$objSite = new SiteClas('marplo.net', 'php-mysql');

$objSite->pagini('oop-clase-obiecte.html');        // Apelare metoda pagini()
?>
- Dupa executie, in browser va afisa:
marplo.net/php-mysql/oop-clase-obiecte.html
Valoarea proprietatii "site", avand atribut "public", poate fi modificata si pe parcurs in script, cu expresia:
          $objSite->site = valoare;

2. Accesare si modificare proprietati prin metode Accesor

Variabilele in PHP nu au un tip de date stabilit precis la declararea lor, de exemplu, o variabila poate sa contina initial ca valoare un numar, iar pe parcursul scriptului sa i-se atribuie ca valoare un sir sau un Array. Aceasta flexibilitate este folositoare, dar in unele situatii poate prezenta probleme in anumite contexte din codul unei metode.
De exemplu, daca intr-o metoda se parcurg datele dintr-o proprietate de tip Array iar in script acea proprietate primeste o valoare de tip Sir, apar erori.
Pentru a fi siguri ca o proprietate primeste doar tipul de date care poate fi corect utilizat, se declara ca private si se folosesc metode accesor pentru accesarea ei, cu functii PHP de verificare a tipului de date. Aceste functii sunt:


Iata o alta versiune a clasei TestClas. Ambele proprietati sunt declarate "private", ca sa nu fie modificate in mod direct in afara clasei. Valorile initiale le primesc la crearea instantei (prin constructor). Pentru a putea accesa si modifica proprietatea "categorie" in script, se creaza special cate o metoda accesor: getCategorie() si setCategorie() (vedeti si explicatiile din cod).
<?php
// Se defineste clasa SiteClas
class SiteClas {
  // Definire proprietati private, fara valoare
  private $site;
  private $categorie;

  // Constructor
  public function __construct($site, $categorie) {
    // Atribuie proprietatilor valoarea din parametri
    $this->site = $site;
    $this->categorie = $categorie;
  }

  // Metoda accesor - returneaza valoarea proprietatii 'categorie'
  public function getCategorie() {
    return $this->categorie;
  }

  // Metoda accesor pt. setare valoare la "categorie"
  public function setCategorie($val) {
    // Daca $val e de tip Sir (string) si are cel putin un caracter
    // Atribuie valoarea lui proprietatii 'categorie'
    // Altfel, returneaza eroare
    if(is_string($val) && strlen($val)>0) {
      $this->categorie = $val;
    }
  else throw new Exception('Valoare incorecta pt. categorie');
  }

  // Metoda pt. afisare adresa pagini
  public function pagini($pag) {
    // Afiseaza un sir cu adresa URL, www., valoarea celor 2 proprietati si argumentul primit
    echo '<br />www.'. $this->site.'/'. $this->categorie.'/'. $pag;
  }
}
?>
- Prin declararea proprietatilor ca "private", se respinge accesul direct la ele in afara clasei, iar pt. proprietatea "categorie" s-a creat posibilitatea de a fi accesata si modificata valoarea ei prin metodele accesor: getCategorie() si setcategorie($val).
- In setCategorie($val) se atribuie valoarea transmisa pt. $val la "categorie" (prin formula $this->categorie = $val;) doar daca $val e de tip Sir (String) si are cel putin un caracter; altfel, utilizand formula speciala "throw new Exception('Eroare')" returneaza un mesaj de eroare.
- Pentru a testa efectul acestor metode, se executa scriptul urmator, in care e utilizata o instanta la aceasta clasa.
<?php
include('class.SiteClas.php');        // Include clasa

// Creare instanta de obiect la clasa SiteClas
$objSite = new SiteClas('marplo.net', 'php-mysql');

// Afiseaza valoarea returnata de getCategorie() (reprezentand valoarea proprietatii "categorie")
echo $objSite->getCategorie();

// Modifica prin setCategorie() valoarea proprietatii "categorie"
$objSite->setCategorie('html');

$objSite->pagini('introducere.html');        // Apelare metoda pagini()
?>
- In browser scriptul va afisa:
php-mysql
marplo.net/html/introducere.html
- "php-mysql" este valoarea initiala data proprietatii "categorie" prin crearea instantei la clasa. Dar prin modificarea ei cu $objSite->setCategorie('html');, metoda pagini() va utiliza proprietatea "categorie" cu aceasta valoare (html).

3. Metoda Destructor

Metoda Destructor se creaza cu numele __destruct (doua caractere '_' la inceput). Aceasta metoda este opusul lui __construct. Daca metoda constructor e apelata automat cand se creaza o instanta de obiect la clasa, metoda Destructor se apeleaza automat cand e stearsa, cu unset(), instanta la acea clasa.
Se intelege mai bine din urmatorul exemplu. Clasa Test de mai jos contine o proprietate privata, "nume", o metoda accesor "setNume()", metoda constructor si destructor.

<?php
// Clasa Test
class Test {
  private $nume;

  // Constructor
  public function __construct($nume) {
    // Atribuie proprietatii 'nume' valoarea din parametru
    // si afiseaza un mesaj
    $this->nume = $nume;
    echo 'Bine ai venit '. $this->nume. '<br />';
  }

  // Metoda accesor - schimba valoarea proprietatii 'nume'
  public function setNume($nume) {
    $this->nume = $nume;
  }

  // Metoda Destructor
  function __destruct() {
    echo 'Cu bine '. $this->nume;
  }
}
?>
- Ca sa testam efectul metodei __destruct, se foloseste urmatorul script (vedeti explicatiile din cod).
<?php
// Creare instanta de obiect la clasa Test
$obj = new Test('Mar');

// Apeleaza metoda setNume(), care seteaza alta valoarea la prop. 'nume'
$obj->setNume('Plo');

// Sterge instanta de obiect $obj
unset($obj);
?>
- Prin argumentul 'Mar' adaugat la crearea instantei, metoda constructor atribuie aceasta valoare proprietatii "nume", pe care o afiseaza in mesajul returnat.
- Apelarea metodei setNume() modifica valoarea acestei proprietati, iar cand instanta de obiect e stearsa, cu unset($obj), se autoapeleaza metoda "__destruct" si determina executia codului din ea, care va afisa alt mesaj, cu proprietatea "nume" avand ultima valoare setata.
- Rezultatul afisat in browser este:
Bine ai venit Mar
Cu bine Plo

Metoda destructor este utila cand se doreste executarea automata a unor ultime instructiuni cand instanta la clasa e stearsa din memorie prin apelarea functiei PHP unset().


In lectia urmatoare sunt prezentate Constante si elemente Statice in Clasele PHP.

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Ce tag adauga imagine in pagina web?
<div> <img> <span>
<img src="http://coursesweb.net/imgs/webcourses.gif" width="191" height="63" alt="Courses-Web" />
Care din aceste coduri CSS afiseaza textul inclinat?
font-style: italic; text-decoration: underline; font-weight: 500;
#id {
  font-style: italic;
}
Clic pe functia jQuery care ascunde animat un element HTML.
click() hide() show()
$(document).ready(function() {
  $(".a_class").click(function(){ $(this).hide("slow"); });
});
Clic pe functia definita corect in PHP.
fname function() {} function fname() {} function $fname() {};
function fname($a, $b) {
  echo $a * $b;
}
Indicati forma pentru Prezent Perfect Continuu a verbului "to walk" (a merge).
have walked have been walking be walking
I have been walking for 5 hours.
- Merg pe jos de 5 ore.
Indicati Trecutul Nedefinit pentru verbul "ser" (a fi) la forma Yo.
será sería fui
Yo fui entrenador.
- Am fost antrenor.
PHP OOP - metode Accesor si Destructor

Last accessed pages

  1. Definire Variabile si Constante (6130)
  2. Parcurgere Array secvential si asociativ (1505)
  3. Tag-urile DIV si SPAN (9653)
  4. Verbe ca si Gustar (1746)
  5. Cursuri Limba Rusa (5325)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (1260)
  2. Curs HTML gratuit Tutoriale HTML5 (967)
  3. Coduri pt culori (721)
  4. Creare si editare pagini HTML (567)
  5. Conditional IF in Limba Engleza - Fraze Conditionale (524)