OOP v PHP: Objektové rozhraní

15. února 2006

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.

Štítky: oop-php

Mohlo by vás také zajímat

Nejnovější

4 komentářů

  1. ereste

    Bře 26, 2014 v 16:00

    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‘);

    Odpovědět
  2. jakub

    Bře 27, 2014 v 9:58

    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á :-)

    Odpovědět
  3. Martin

    Kvě 29, 2014 v 2:28

    Ahoj, chci se zeptat:
    1) interface by se dalo tedy přirovnat k hlavičkovým souborům (.h) v jazyce C? Jen tím jak je PHP blbu vzdorné, tak mu je jedno jestli to v interface je či není, ale ty si tím můžeš přidat přehlednost?
    2) Konstanty a atrtibuty tříd při použití interface je lepší mít v „class“ nebo „interface“?
    …jinak bylo by dobré doplnit informace/příklad kdy se hodí použití interface a ukázat tak jeho výhody.

    Díky

    Odpovědět
  4. Phil

    Lis 12, 2014 v 13:55

    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

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *