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 tip de <input> creaza un camp de text care trebuie sa contina doar numere?
type="text" type="number" type="date"
<input type="number" name="points" min="5" max="80" />
Ce proprietate CSS permite modificarea transparentei unui element?
font-style opacity color
#id {
  filter:alpha(opacity=40);    /* for IE */
  opacity:0.4;
}
Clic pe functia care formateaza un numar la o anumita lungime de caractere.
toPrecision() exp() toFixed()
var num = 12.84567;
alert( num.toPrecision(3) );       // 12.8
Ce functie aranjeaza aleator elementele dintr-un array?
natsort() shuffle() sort()
$lang =[10=>"PHP", 20=>"JavaScript", "site"=>"coursesweb.net");
shuffle($lang);
var_export($lang);     // array (0=>"coursesweb.net", 1=>"PHP", 2=>"JavaScript")
Indicati Superlativul cuvantului "good" (bun).
better best goodest
She is the best in our class.
- Ea este cea mai buna din clasa noastra.
Care este Superlativul cuvantului "bueno" (bun)?
el mejor más bueno muy bueno
Él es el mejor en nuestra clase.
- El este cel mai bun din clasa noastra.
PHP OOP - metode Accesor si Destructor

Last accessed pages

  1. Cursuri limba engleza gratuite si lectii online (64479)
  2. Verbe modale - Modal verbs - CAN, COULD, MAY, MIGHT, MUST (66879)
  3. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (270551)
  4. Verbe Dinamice si Statice - Exercitii Engleza (4512)
  5. Poezii pentru copii, in engleza (40051)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (265)
  2. Exercitii engleza - English Tests and exercises - Grammar (152)
  3. Cursuri limba engleza gratuite si lectii online (123)
  4. Gramatica limbii engleze - Prezentare Generala (118)
  5. Prezentul simplu - Exercitii si teste incepatori (111)