In Programarea Orientata pe Obiecte (OOP) din PHP exista cateva metode mai speciale, care incep cu "__" (doua caractere '_'), precum __construct(). Acestea sunt numite generic Metode Magice (Magic Methods) si se executa automat in situatii mai speciale, cum ar fi de exemplu __get() pentru accesari de proprietati inexistente.
In aceasta lectie sunt prezentate cateva din cele mai folosite astfel de metode: __get(), __set(), __call() si __toString().
- Toate aceste metode magice trebuie sa fie definite cu atribut public.
Metodele magice: __get() si __set() se folosesc de obicei impreuna si sunt create pentru lucru cu proprietati care nu sunt definite.
<?php // Definire clasa AClas class AClas { // Proprietate care va retine valori atribuite unor proprietati nedeclarate public $prop = array(); // Metoda magica __get() (pt. accesari proprietati nedefinite) public function __get($name) { // Daca exista element cu cheia '$name' in $prop, afiseaza valoarea lui // Altfel, mesaj ca proprietatea nu exista if(array_key_exists($name, $this->prop)) echo $this->prop[$name]. '<br />'; else echo 'Proprietatea <b>'. $name. '</b> nu exista.<br />'; } // Metoda magica __set() (pt. cand se atribuie valori unor proprietati nedefinite) public function __set($name, $value) { // Adauga in $prop element cu cheia $name si valoarea value $this->prop[$name] = $value; echo 'Proprietatea <b>'. $name. '</b> nu exista. S-a atribuit valoarea <i>'. $value. "</i> la proprietatea: <b>prop['$name']</b><br />"; } } // Creare instanta de obiect la clasa AClas $obj = new AClas(); // Apelare proprietate neexistenta $obj->noprop; // Va determina executia metodei __get() // Atribuire valoare la proprietate inexistenta $obj->noprop = 'Valoare pt. noprop - PHP OOP'; // Va determina executia metodei __set() // Apelare din nou a aceleiasi proprietati neexistente $obj->noprop; // Va determina executia metodei __get() // Se verifica direct si elementul pe care-l creaza __set() echo 'Verificare: '. $obj->prop['noprop']; ?>- $prop e definita ca tip Array ca sa stocheze, prin metoda __set(), valorile atribuite unor proprietati nedefinite.
Metoda magica __call() e creata pentru cazuri cand sunt apelate metode inexistente. Sintaxa ei este:
__call($nume, $array_argumente)
- $nume reprezinta numele metodei apelate
- in $array_argumente sunt retinute intr-un Array argumentele adaugate la apelarea metodei.
<?php // Definire clasa AClas class AClas { // Metoda magica __call() (pt. apelari metode nedefinite) public function __call($name, $args) { // Afiseaza un mesaj cu numele metodei apelate si argumentele transmise echo 'Metoda <b>'. $name. '</b> nu exista. Argumente: <i>'. implode(', ', $args). '</i>'; } } // Creare instanta de obiect la clasa AClas $obj = new AClas(); // Apelare metoda inexistenta $obj->site('cursuri', 'tutoriale'); // Va determina executia metodei __call() ?>- In browser va afisa:
Incepand cu PHP 3.0 e adaugata o metoda similara, __callStatic(), aceasta se executa automat cand e apelata o metoda statica nedeclarata, prin formula: NumeClasa::metodaStatica()
Cu metoda __toString() se determina modul de reactie a clasei cand instanta de obiect la ea este folosita ca o variabila de tip sir (String), de exemplu cu "echo".
<?php // Definire clasa AClas class AClas { private $mesaj; // Proprietate // Metoda Constructor public function __construct($mesaj) { // Atribuie valoarea din parametru la proprietatea "mesaj" $this->mesaj = $mesaj; } // Metoda magica __toString() public function __toString() { return $this->mesaj; // Returneaza valoarea proprietatii "mesaj" } } // Creare instanta de obiect la clasa AClas $obj = new AClas('Fii bine primit'); // Apelare instanta, ca pe o variabila de tip String echo $obj; // Va determina executia metodei __toString() ?>- In browser va afisa:
<p>Cursuri graruite: <mark>MarPlo.net</mark> , jocuri, anime.</p>
a:hover { font-weight: bold; color: #00da01; }
var num = 12.34567; num = num.toFixed(2); alert(num); // 12.35
$arr = file("a_file.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); var_export($arr);
What time is it? It is a quarter to 5. - Cat este ora? E 5 fara un sfert.
¿Qué hora es? Son las tres menos cuarto. - Cat este ora? E 3 fara un sfert.