Objektové rozhraní lze charakterizovat jako šablonu vzoru. Pokud vytváříte velké třídy, které zahrnují a volají další třídy na základě různých okolností, občas se může stát, že budete volat metodu, která není nikde definovaná. Abychom předcházeli takovým chybám, PHP 5 umožňuje specifikovat objektové rozhraní.

Princip spočívá v tom, že vytvoříte kostru třídy a výsledná třída poté kostru jen implementuje. V rozhraní určujete názvy metod a argumenty, které příjmá. Všechny metody v rozhraní musí být typu public. Objektové rozhraní se narozdíl od tříd definuje klíčovým slovem interface. Za názvem třídy poté uvádíme frázi implements a název zahrnutého rozhraní.

Pokud následně použijeme metodu, která není v rozhraní, skript skončí chybou.

Zbývá dodat, že třída může zahrnovat i více rozhraní (což je rozdíl oproti dědičnosti, třída může mít pouze jednoho rodiče).

<?php 

  interface Rozhrani{ 
    public function VypisuRozhrani(); 
    public function VypisParametr($parametr); 
  } 
   
  class Trida implements Rozhrani{ 
    public function VypisuRozhrani(){ 
    echo 'Rozhraní bylo zahrnuto'; 
    } 
    public function VypisParametr($parametr){ 
    echo $parametr; 
    } 
  } 

$tr = new Trida; 
$tr->VypisuRozhrani(); 
$tr->VypisParametr('Vypíše paramtr'); 

?>

Příklad ukazuje způsob definice rozhraní a jeho následné zahrnutí třídou Trida. Kdybychom chtěli zahrnout větší počet rozhraní, byla by oddělena čárkou:

<?php 
  //Definice rozhrani Rozhrani a Rozhrani2 
   
  class Trida implements Rozhrani,Rozhrani2{ 
    public function VypisuRozhrani(){ 
    echo 'Rozhraní blo zahrnuto'; 
    } 
    public function VypisParametr($parametr){ 
    echo $parametr; 
    } 
  } 

?>

Pozn. red.: Zdůrazňujeme, že tento text se týká PHP 5.

3 Příspěvků v diskuzi

  1. Niečo tu nesedí. Definícia metody v rozhraní je zbytočná. Nižšie uvedený príklad funguje rovnako ako ten v článku (žiadna chybová hláška):

    interface Rozhrani{
    // public function VypisuRozhrani();
    // public function VypisParametr($parametr);
    }

    class Trida implements Rozhrani{
    public function VypisuRozhrani(){
    echo ‚Rozhraní bylo zahrnuto‘;
    }
    public function VypisParametr($parametr){
    echo $parametr;
    }
    }

    $tr = new Trida;
    $tr->VypisuRozhrani();
    $tr->VypisParametr(‚Vypíše paramtr‘);

  2. Máš pravdu..tvůj příklad bude fungovat, ale to budou i dvě obyčejné funkce bez použití objektů ;-) Evidentně jsi nepochopil proč a k čemu se interface používá :-)

  3. Myslím, spíš že je špatně udáno: „Pokud následně použijeme metodu, která není v rozhraní, skript skončí chybou.“. Skript skončí chybou, když nedefinujeme metodu z rozhraní, ne když definujeme novou…

Odpovědět