Metode Magice
Pana acum stiai de metodele magice __construct si __destruct dar acum este timpul sa le inveti si pe restul, ele sunt mai rar folosite ba chiar niciodata dar este bine sa mai invatam si lucruri de umplutura, nu? Nu prea este recomandat, sunt bune de invatat urmatoarele deoarece va ofera un control mai bun asupra executiei clasei. Dupa cum o sa observati toate metodele magice au prefixul __(doua caractere _).
Lista cu metodele magice:
Metoda | Descriere |
---|---|
__construct($parametrii_clasa) | Este apelata cand este creata o instanta a clasei |
__destruct() | Este apelata cand o instanta a clasei este distrusa |
__get($nume_variabila) | Metoda este apelata cand se apeleaza o variabila care nu exista sau care este inaccesibila(de exemplu este protejata) |
__set($nume_variabila, $valoare) | Metoda este apelata cand se incearca sa se atribuie o valoare unei variabiabile care nu exista sau care este inaccesibila(de exemplu este protejata) |
__call($nume_functie, $parametrii) | Metoda este apelata cand se incearca sa se apeleze o functie care nu exista sau este inaccesibila. |
__callstatic($nume_functie, $parametrii) | Metoda este apelata cand se incearca sa se apeleze o functie statica care nu exista sau este inaccesibila. |
__isset($nume) | Metoda este apelata cand se testeaza cu functia isset daca o proprietate a clasei exista. |
__unset($nume) | Metoda este apelata cand se apeleaza functia unset pe o proprietate a clasei. |
__toString() | Metoda este apelata cand folosesti echo pe obiect. |
__invoke() | Metoda este apelata cand foloseste obiectul ca pe o functie. |
In urmatorul exemplu veti observa ca daca folosim $obj->$var(observati $-ul) iar $var are valoarea aaa se apeleaza variabila $this->aaa
Exemplul urmator va fi mai complicat, aveti nevoie de timp pentru a-l intelege.
Cod /test.php:
<?php # fisier: /test.php class Clasa{ private $test = 'aaaa'; function __set($nume, $valoare){ echo 'Metoda magica <b>__set</b> a fost accesata.<br/>'; if(!isset($this->$nume)){ $this->$nume = $valoare; } else{ echo '<br/>Nu se pot seta variabile private, doar cele nesetate.'; } echo '<hr/>'; } function __get($nume){ echo "Metoda magica <b>__get</b> a fost apelata cu parametrul {$nume}<hr/>"; } function __call($nume, $parametrii){ $p = print_r($parametrii, true); echo "Metoda <b>_call</b> a fost apelata. Metoda $nume a fost apelata cu parametrii $p<hr/>"; } public static function __callstatic($nume, $parametrii){ $p = print_r($parametrii, true); echo "Metoda <b>__calstatic</b> a fost apelata. Metoda statica $nume a fost apelata cu parametrii $p<hr/>"; } function __isset($nume){ echo "Metoda <b>__isset</b> a fost apelata. Exista <b>$nume?</b> <hr/>"; return isset($this->$nume); } function __unset($nume){ echo "Metoda <b>__unset</b> a fost apelata. Se sterge proprietatea {$nume}<hr/>"; unset($this->$nume); } function __toString(){ echo 'Metoda <b>__toString</b> a fost apelata.<hr/>'; return 'text obiect'; } function __invoke($parametru){ echo 'Metoda <b>__invoke</b> a fost apelata. Obiectul a fost apelat ca o functie.<hr/>'; } } $obiect = new Clasa; echo $obiect->nu_exista; // apelam __get $obiect->aaa = 'aaa'; // apelam __set pe o proprietate nedefinita $obiect->test = 'aaa'; // apelam __set pe o proprietate privata. $obiect->zzzz(); // apelam __call Clasa::functie_inexistenta(); // apelam __callStatic isset($obiect->rrrrr); // apelam __isset unset($obiect->test); // apelam __unset, observati ca putem sterge metode private cu __unset echo 'Obiectul transormat in text este: <b>'.$obiect.'</b><hr/>'; // apelam __toString $obiect('aaa'); // apelam __invoke ?>Output:
Tags: Tutoriale, Programare Web, Php, Curs Php
Comments
Nota
0
din
0