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:

<?php 
interface water 
{ 
    public function makeItWet(); 
} 

abstract class weather implements water                    
{ 
   private $cloudy; 
   public function makeItWet(){} 
   abstract public function start(); 
   abstract public function getCloudy(); 
   abstract public function setCloudy(); 
} 

class rain extends weather 
{ 
    private $cloudy;    
    public function start() 
    { 
        return "Here's some weather. "; 
    }    
    public function makeItWet() 
    { 
        return 'it is raining cats and dogs today.'; 
    }
    public function getCloudy() 
    { 
        return $this->cloudy; 
    } 
    public function setCloudy($bln=false) 
    { 
        $this->cloudy = $bln; 
    } 
} 

$a = new rain(); 
echo $a->start(); 
$a->setCloudy(true); 
if ($a->getCloudy()) { 
    echo 'It is a cloudy day and '; 
} 
echo $a->makeItWet(); 
?>
De ahogy néztem ez tökéletesen működik ígyis:

<?php 
class rain 
{ 
    private $cloudy;    
    public function start() 
    { 
        return "Here's some weather. "; 
    } 
    
    public function makeItWet() 
    { 
        return 'it is raining cats and dogs today.'; 
    } 
    public function getCloudy() 
    { 
        return $this->cloudy; 
    } 
    public function setCloudy($bln=false) 
    { 
        $this->cloudy = $bln; 
    } 
} 

$a = new rain(); 
echo $a->start(); 
$a->setCloudy(true); 
if ($a->getCloudy()) { 
    echo 'It is a cloudy day and '; 
} 
echo $a->makeItWet(); 
?>
 
1

Interface

janoszen · 2011. Május. 8. (V), 19.36
Az interface az, amit a neve is elmond. Nézzünk egy egyszerű esetet:

<?php

interface Application {
   function run();
}

class ApplicationRunner {
   function baz(Application $a) {
      $a->run();
   }
}
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.