• Početna
  • O nama
  • LimundoGrad
  • Limundo
  • Kupindo
  • Sigurnost
  • IT
  • Zabava i učenje
  • Plaćanje
  • API
LimundoGrad blog
  • Početna
  • O nama
  • LimundoGrad
  • Limundo
  • Kupindo
  • Sigurnost
  • IT
  • Zabava i učenje
  • Plaćanje
  • API
Home  /  IT  /  PHP Preporuke Petkom – Refleksija

PHP Preporuke Petkom – Refleksija

Autor:Miodrag Stefanović
22. августа 2014. IT Comments are off

Refleksija je koncept programiranja koji daje mogućnost softveru da sam sebe menja (svoju strukturu i ponašanje) nakon što je već pokrenut. Drugim rečima, programski jezici koji podržavaju refleksiju imaju mogućnost da sebe dinamički menjaju bez potrebe intervencije programera i ponovnog kompajliranja/pokretanja softvera nakon unesenih izmena.

Preuzeto sa XKCD: Automation

PHP od verzije 5 podržava kompletan Reflection API, koji se doduše još uvek unapređuje i nije potpuno dokumentovan.

U sledećem primeru ću pokušati da predstavim osnovni koncept Refleksije. Za potrebe primera ćemo napraviti proste klase koje računaju površine tri geometrijske figure – Kruga, Kvadrata i Trougla:

<?php
  /**
  Klasa Krug racuna povrsinu kruga
  */
  class Krug{
  /**
  Povrsina kruga je poluprecnik na kvadrat puta Pi
  */
     function Povrsina($r){
        $P=$r*$r*3.14;
        return $P;
     }
  }
/**
  Klasa Kvadrat racuna povrsinu kvadrata
  */
  class Kvadrat{
  /**
  Povrsina kvadrata je stranica na kvadrat
  */
     function Povrsina($a){
        $P=$a*$a;
        return $P;
     }
  }
/**
  Klasa Trougao racuna povrsinu trougla
  */
  class Trougao{
  /**
  Povrsina trougla je stranica puta njena visina podeljeno sa dva
  */
     function Povrsina($b,$h){
            $P=$b*$h/2;
            return $P;
     }
  }
  ?>

Na osnovu izbora koji korisnik softvera unese, izračunaćemo površinu odgovarajuće geometrijske figure.
Standardni način bi bio otprilike:

 <?php
//Ove parametre bira korisnik, za potrebe primera ćemo ih ‘zakucati’
  $Figura="Krug";
  $PrviParametar=3;
  $DrugiParametar=6;
//Na osnovu izbora racunamo odgovarajucu povrsinu
  if($Figura=="Krug"){
     $Krug= new Krug();
     echo "<br/>".$Figura." povrsina: ";
     echo $Krug->Povrsina($PrviParametar);
  }
if($Figura=="Kvadrat"){
     $Kvadrat= new Kvadrat();
     echo "<br/>".$Figura." povrsina: ";
     echo $Kvadrat->Povrsina($PrviParametar);
  }
if($Figura=="Trougao"){
     $Trougao= new Trougao();
     echo "<br/>".$Figura." povrsina: ";
     echo $Trougao->Povrsina($PrviParametar,$DrugiParametar);
  }
  ?>

Preko refleksije možemo da napišemo sledeći kod:

<?php
 //Instanciranje objekta odgovarajuce klase na osnovu prosledjenog imena
 $Reflektor = new ReflectionClass($Figura);
 $FigObj = $Reflektor->newInstance();
 //Kreiranje metode za izracunavanje povrsine iz odgovarajuce klase
 $refMethod = new ReflectionMethod($Figura, 'Povrsina');
 //Pozivanje metode za izracunavanje povrsine nad prethodno instanciranim 
 //objektom, sa potrebnim parametrima
 $Povrsina=$refMethod->invoke($FigObj,$PrviParametar,$DrugiParametar);
 echo "<br/>".$Figura." povrsina: ".$Povrsina;
 ?>

Inače gornji kod možemo da napišemo i koristeći PHP “Variable variables” koncept:

<?php
 $Objekat=new $Figura();
 $Povrsina=$Objekat->Povrsina($PrviParametar,$DrugiParametar);
 echo "<br/>".$Figura." povrsina: ".$Povrsina;
 ?>

Obratite pažnju da iako je Variable variables primer naizgled sličan (pa i jednostavniji) od Reflection primera, oni su ipak konceptualno potpuno drugačiji. Naime za Variable variables smo morali da znamo da postoji metoda Povrsina u nasim klasama. Sa Refleksijom možemo da u toku izvršavanja PHP koda dobijemo informacije o nepoznatim klasama i metodama koje sadrže i da na osnovu toga izvršimo odgovarajuće radnje (istini za volju u Reflection primeru smo takođe direktno pozivali metodu Povrsina).

Dodatna pomoć za parsiranje nepoznatih klasa i metoda može da bude i sposobnost Refleksije da nam vraća komentare upisane u kodu.
Na primer:

<?php
 $ReflKlasa = new ReflectionClass($Figura);
 echo "<br/>".$ReflKlasa->getDocComment();
 $ReflMetoda= new ReflectionMethod($Klasa=$Figura, $Metoda="Povrsina");
 echo "<br/>".$ReflMetoda->getDocComment();
 ?>

U zavisnosti od geometrijske figure koju smo izabrali u $Figura, dobićemo odgovarajuće komentare. Imajte u vidu da komentari moraju da počinju sa /** kako bi getDocComment metoda radila.

Priča o Refleksiji je mnogo šira i ovo su bili najprostiji primeri na osnovu kojih možete da nastavite dalje istraživanje ovog koncepta ako vas je zainteresovao. Ovi primeri možda nemaju praktičnu upotrebu, ali pažljivim pisanjem koda, klasa i metoda, možete da omogućite da se uz pomoć Refleksije pišu softveri koji su pregledniji, prirodniji i lakši za održavanje.

Podeli tekst
Share on Facebook
Share on Twitter
Share on Whatsapp
 Prethodni post Lego kocke – za sve generacije
Sledeći post   Kupujte bezbrižno i sa osmehom na licu

Povezani postovi

  • Pogled ka Tajvanu

    16. септембра 2016.
  • Srećan SysAdmin day!

    29. јула 2016.
  • Kako kreirati sigurnu lozinku

    17. маја 2016.
Advertisement

Popularno na Kupindu

U potrazi ste za udžbenicima za osnovnu ili srednju školu? Pogledajte na Kupindu:

➡️ Udžbenici za osnovnu školu
➡️ Udžbenici za srednju školu

Ovde ćete pronaći udžbenike za svaki razred i izdanja gotovo svih izdavača koje današnje škole traže. Uštedite na kupovini udžbenika.

  • Najpopularnije
  • Poslednji postovi
  • Za sledećih 15 Vladimir Nikolić 22. маја 2021. Limundo 607
  • Hoću da znam šta je neko kupio i prodao Vladan Jović 16. децембра 2013. LimundoGrad 355
  • Kako da ocenim prodavca (a da to bude ispravno)? Ana Mladenović 12. марта 2013. LimundoGrad 248
  • Veštačko nuđenje – istine i laži Vladan Jović 11. јуна 2013. Limundo 234
  • Cenovnik + opcije + brzina Aleksandra Vuković 15. марта 2012. Blog 211
  • Dani ploča na Kupindu: Vinil ne izlazi iz mode! Dunja Stojković 13. марта 2025. Kupindo
  • Top 10 predmeta sa Limunda i Kupinda u 2024. godini! Dunja Stojković 31. децембра 2024. LimundoGrad
  • Digital Awards 2024: Limundo osvojio nagradu za najbolju radijsku kampanju! Dunja Stojković 30. септембра 2024. LimundoGrad
  • Polovna odeća kao znak stila: 10 vrhunskih modnih brendova koje nećete naći u tržnom centru Ivana Lučić 26. августа 2024. LimundoGrad
  • Uživanje u letnjem danu – detalji koji čine baštu posebnom Dunja Stojković 1. августа 2024. Zabava i učenje

Skorašnji komentari

  • Jovana Milenković Arizanović на Tri najjeftinija načina za slanje paketa u LimundoGradu
  • Marija Protic на Tri najjeftinija načina za slanje paketa u LimundoGradu
  • Jovana Milenković Arizanović на Tri najjeftinija načina za slanje paketa u LimundoGradu
  • janoš на Tri najjeftinija načina za slanje paketa u LimundoGradu
  • janoš на Tri najjeftinija načina za slanje paketa u LimundoGradu

Vremeplov

© 2008. LimundoGrad d.o.o. Creative Commons License Ovo delo je licencirano pod uslovima licence Creative Commons Autorstvo-Nekomercijalno-Bez prerada 4.0 Međunarodna licenca
LimundoGrad koristi kolačiće u statističke i marketinške svrhe. Nastavkom korišćenja sajta smatramo da ste pristali na upotrebu kolačića.OKViše informacija