ugrás a tartalomhoz

OOP Interface

Numcsi · 2011. Május. 8. (V), 19.00
Help pls. Átolvastam 2 könyvet, php manuált nézegettem, de ennek az interfacenek nem látom a lényegét. Ha valaki eltudná magyarázni, és példával illusztrálni, hogy hogyan megköszönném.

Nézegettem néhány példát. Íme:
  1. <?php   
  2. interface water   
  3. {   
  4.     public function makeItWet();   
  5. }   
  6.   
  7. abstract class weather implements water                      
  8. {   
  9.    private $cloudy;   
  10.    public function makeItWet(){}   
  11.    abstract public function start();   
  12.    abstract public function getCloudy();   
  13.    abstract public function setCloudy();   
  14. }   
  15.   
  16. class rain extends weather   
  17. {   
  18.     private $cloudy;      
  19.     public function start()   
  20.     {   
  21.         return "Here's some weather. ";   
  22.     }      
  23.     public function makeItWet()   
  24.     {   
  25.         return 'it is raining cats and dogs today.';   
  26.     }  
  27.     public function getCloudy()   
  28.     {   
  29.         return $this->cloudy;   
  30.     }   
  31.     public function setCloudy($bln=false)   
  32.     {   
  33.         $this->cloudy = $bln;   
  34.     }   
  35. }   
  36.   
  37. $a = new rain();   
  38. echo $a->start();   
  39. $a->setCloudy(true);   
  40. if ($a->getCloudy()) {   
  41.     echo 'It is a cloudy day and ';   
  42. }   
  43. echo $a->makeItWet();   
  44. ?>  
De ahogy néztem ez tökéletesen működik ígyis:
  1. <?php   
  2. class rain   
  3. {   
  4.     private $cloudy;      
  5.     public function start()   
  6.     {   
  7.         return "Here's some weather. ";   
  8.     }   
  9.       
  10.     public function makeItWet()   
  11.     {   
  12.         return 'it is raining cats and dogs today.';   
  13.     }   
  14.     public function getCloudy()   
  15.     {   
  16.         return $this->cloudy;   
  17.     }   
  18.     public function setCloudy($bln=false)   
  19.     {   
  20.         $this->cloudy = $bln;   
  21.     }   
  22. }   
  23.   
  24. $a = new rain();   
  25. echo $a->start();   
  26. $a->setCloudy(true);   
  27. if ($a->getCloudy()) {   
  28.     echo 'It is a cloudy day and ';   
  29. }   
  30. echo $a->makeItWet();   
  31. ?>  
 
1

Interface

janoszen · 2011. Május. 8. (V), 19.36
Az interface az, amit a neve is elmond. Nézzünk egy egyszerű esetet:
  1. <?php  
  2.   
  3. interface Application {  
  4.    function run();  
  5. }  
  6.   
  7. class ApplicationRunner {  
  8.    function baz(Application $a) {  
  9.       $a->run();  
  10.    }  
  11. }  
Sok féle alkalmazásod lehet, ami mindenféle egyéb osztályokból öröklődik, de egy biztos: léteznie kell a run függvénynek. Ha nem létezik, akkor bajban vagy, mert el fog halni az alkalmazás. Erre való az interface: a compiler által ellenőrizhető módon dokumentálja, hogy szükség van bizonyos függvényekre és azoknak hogy kell kinéznie.

Természetesen érvelhetnél úgy, hogy Te írod a kódot, nem felejted el, de a gyakorlat egyrészt azt mutatja, hogy hasznos, mert nem kell annyi mindenre figyelni, másrészt a modern fejlesztőkörnyezetekben (NetBeans, Eclipse, stb) ilyenkor kapsz kódkiegészítést, tehát nem kell ismerned fejből az összes függvényt, amit az interface nyújt.