OOP v PHP: Objektové rozhraní
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.
Mohlo by vás také zajímat
-
Proč je důležité tvořit obsah na váš web?
29. srpna 2024 -
Vstupte do éry umělé inteligence: ASOME Max Studio s AMD Ryzen™ 9 7940HS
14. listopadu 2023 -
Rychlost serveru: Klíč k lepšímu umístění ve vyhledávačích
7. června 2024
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024
ereste
Bře 26, 2014 v 16:00Nieč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‘);
jakub
Bře 27, 2014 v 9:58Máš 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á :-)
Martin
Kvě 29, 2014 v 2:28Ahoj, 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
Phil
Lis 12, 2014 v 13:55Myslí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…