Cauta rapid aici ↑

Importanta metodelor care incep cu dublu underscore

Limbajul PHP are in componenta lui o caracteristica aparte ce este orientata pe lucrul cu obiecte. Aceasta caracteristica face referire la diferite metode predefinite ale claselor de care cel mai probabil nu ai stiut ca exista. Aceste metode mai poarta denumirea si de metode magice si asta pentru ca te ajuta sa interactionezi mai bine cu obiectele. Aceste metode incep cu doua caractere underscore si apoi un nume rezervat. Din moment ce aceste metode incep cu doua caractere underscore, PHP ne recomanda sa evitam declararea numelui unei metode cu dublu underscore la inceput si asta pentru ca in versiunile viitoare ar putea apare o metoda care sa aiba acelasi nume cu cea pe care ai declarat-o tu in programele tale. Metodele magice au ca scop principal sa te scuteasca de o parte din munca ta in acel program. Acum este timpul sa cunoastem cateva dintre aceste metode.

  • __construct
  • __sleep
  • __wakeup
  • __invoke
  • __debugInfo
  • __toString
  • __set
  • __get
  • __isset
  • __unset
  • __call
  • __callStatic
  • __autoload

Fiecare dintre aceste metode are un rol bine definit si vor face in mare ceea ce numele lor sugereaza. Metoda cea mai populara din aceasta lista este __construct iar aceasta va putea retine diferite valori in parametrii ei. Aceste valori sunt declarate in momentul cand o clasa este instantiata si binenteles in parantezele rotunde.

    	class dev{
        	function __construct($a){
            	return $a;
            }
        }
        $obj = new dev('PHP DEV');
        // $a = 'PHP DEV';
    

Alte doua metode din lista sunt __sleep si __wakeup. Metoda __sleep este declansata cand un obiect este serializat iar metoda __wakeup este declansata cand un obiect este neserializat.

Metoda __invoke ne permite sa declaram o clasa ce devine invocabila si sa testam diferite valori iar metoda __debugInfo este apelata ori de cate ori executam var_dump pe un obiect. Metoda __debugInfo devine foarte utila si ne ofera informatii suplimentare fata de ceea ce ne-ar fi arata var_dump in mod standard.

    	class test{
        	function __construct(){}
        }
        var_dump(new test);
        // va afisa in PHP 7 → object(test)#1 (0) { }
    

Atunci cand vrei sa ai o reprezentare in format sir (string) a unui obiect, metoda __toString are acest rol si totodata iti ofera posibilitatea ce sir sa iti returneze. Metodele __set si __get sunt apelate in momentul cand o proprietate a unui obiect nu exista. Un rol asemanator il au si metodele __isset si __unset. Metodele __call si __callStatic sunt apelate in momentul cand sunt apelate alte metode in contextul unui obiect sau in contextul static.

Este putin probabil sa folosim toate aceste metode ale claselor in programele noastre si asta pentru ca nu intotdeauna este nevoie de ele, ba mai mult aceste metode vor returna uneori un rezultat la care nu te asteptai. Totodata este bine sa retineti ca aceste metode pot face diferite lucruri ciudate fara sa va anunte.