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
Care tag afiseaza textul oblic?
<strong> <pre> <em>
<p>Cursuri, Jocuri, Anime: <em>www.MarPlo.net</em></p>
Care proprietate CSS defineste spatiul dintre continutul elementului si bordura lui?
margin padding position
h3 {
  padding: 2px 0.2em;
}
Clic pe metoda ce returneaza primul element indicat de selectorii specificati.
getElementsByName() querySelector() querySelectorAll()
// preia primul Div cu class="cls", si afiseaza continutul
var elm = document.querySelector("div.cls");
alert(elm.innerHTML);
Indicati variabila PHP ce contine datele din formular trimise cu method="post".
$_SESSION $_GET $_POST
if(isset($_POST["field"])) {
  echo $_POST["field"];
}
Indicati pronumele corespunzator celui din paranteza in propozitia: "(Noi) speak english".
I They We
We speak english.
- Noi vorbim engleza.
Indicati pronumele corespunzator celui din paranteza in propozitia: "(Noi) hablamos español".
Ellos Vosotros Nosotros
Nosotros hablamos español.
- Noi vorbim spaniola.
PHP OOP - metode Accesor si Destructor

Last accessed pages

  1. Prezentul simplu - Exercitii si teste incepatori (29385)
  2. Corpul omului in limba engleza (391)
  3. Viitor simplu si continuu - Future Tense Simple and Continuous (28971)
  4. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (126445)
  5. Viitorul perfect - Exercitii incepatori (1757)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (2756)
  2. Curs HTML gratuit Tutoriale HTML5 (1864)
  3. Curs si Tutoriale JavaScript (1757)
  4. Curs PHP MySQL, Tutoriale si Scripturi PHP (1705)
  5. Curs CSS Online Tutoriale CSS3 (1594)