Únor 12th, 2007OOP v PHP 3 - interface
Interface (rozhranní) je jedna z věcí, která je často přeceňována nebo nedoceňována. Oč vlastně jde?
Představte si, že se dostanete do situace, kdy budete potřebovat určit, že objekt „umí“ něco, co se od něj očekává, ale nejsme si jistí, zda to tak je :)
Uvedu příklad:
Mám objekty manželka, děti, papoušek, pes a tchýně. Všechny objekty
mohu považovat za součást rodiny. Problém nastává ve chvíli, kdy bych
potřeboval vědět, kdo z uvedených rodinných příslušníků umí vařit.
Vaření si mohu představit jako metodu, která mi provede danný úkon a
vytvoří (vrátí) objekt jídlo.
Toto je klasický příklad, kdy mohu použít (implementovat) interface. Nejdříve si vytvořím vlastní interface, které bude obsahovat metodu uvarJidlo().
interface UmiVarit
{
public function uvarJidlo(Jidlo $jidlo);
{
?>
Nyní mám rozhranní, které je potřeba implementovat na ty třídy, které budou moci vařit jídlo.
class Manzelka implements UmiVarit
{
public function uvarJidlo(Jidlo $jidlo)
{
return "manzelka uvarila: ". $jidlo->getNazev();
}
}?>
Takže nyní, když zavolám objekt (rodinného příslušníka), jsem schopen určit, který z nich vařit umí a který nikoli.
$rodina[] = new Manzelka();
$rodina[] = new Tchyne();
$rodina[] = new Pes();
foreach($rodina as $val) {
if($val instanceof UmiVarit) {
echo "umi varit: ". $val->uvarJidlo(new ChlebaVeVajicku());
}
}
?>
Interface můžete chápat jako svou vlastní kontrolu, kde si programátor označuje jednotlivé třídy podle toho, co mají umět. Myslím si, že úplnému pochopení, k čemu vlastně interface mohu využít a jak použít je otázkou praxe. Jak se říká: nic se nemá přehánět. A to platí i zde. Na druhou stranu, ignorace implementování rozhranní vede k chaosu a nižší funkčnosti.
Co se týče pravidel, jsou zde jasně danná specifika:- interface může obsahovat konstanty a veřejné metody
- třída implementující interface musí obsahovat metody podle interface
- třída může implementovat více rozhranní, které se oddělují čárkou (např. UmiVarit, PrepinaTelevizi)
Samotné PHP obsahuje několik předdefinovaných rozhranní, z nichž nejzajímavější je Iterator.
Tak by bylo k interface vše. Samozřejmě, dalo by se zde napsat spoustu dalších možností a využití, ale stačí, když si budu pamatovat, že Interface usnadňuje a označuje třídy tak, abych byl schopen použít jejich specifické vlastnosti.
Příště již ke zmíněným abstraktním třídám a dědičnosti, která je asi tím nejsložitějším tématem v OOP vůbec.
Únor 13th, 2007 at 6.25
Je to stále php?
když to vidím, tak zjištiji, že php neumím.
Jsem totiž jen na začátku php a mysql. No, mám se ještě co učit
Únor 13th, 2007 at 8.51
Předem je důležité si uvědomit, že OOP má svá vlastní specifika co se týče syntaxe. Téměř ve všech jazycích, podporující OOP je ta syntaxe velice podobná (Java, C#, PHP, …).
Jednou z věcí je řešení malých problémů, typu (jak efektivně odstranit diakritiku, …) a druhou je návrh kódu, který poté v jednotlivých metodách řeší malé problémy. Objekty se dají chápat jako obal nad procedurálním kódem. Než ovšem tento „obal“ pochopím a naučím se přemýšlet v opačné logice, při návrhu kódu, chvíli to trvá. Věřte mi, že se to každopádně vyplatí.
Únor 27th, 2007 at 16.06
Super seriál, doufám v pokračování
Pro mě osobně jsou nejpřínosnější praktické
příklady – chápu princip a syntaxi OOP v PHP, trochu ale bojuju
s použitím v konkrétní aplikaci…
Březen 6th, 2007 at 15.50
Rekl bych ze na treti dil serialu o OOP v PHP je toto trochu moc vepredu. Ve tretim dilu bych cekal srozumitelne vysvetlenou viditelnost metod a promenych. Potom dediscnost. A postupne pritvrdovat.
Innterface je takova zvlatni dedicnost.
BTW: Pekny blog, pokud bude takhle hezky pokracovat necham na blogu sem odkaz.
Březen 6th, 2007 at 17.22
Rozumím, problém většinou bývá, že proto, aby jsi byl schopen začít psát v objektech, tak musíš znát spoustu věcí, které nabalují další a další. Spíše bych to viděl tak, že prolétnu všechny potřebné věci a ty pak budu pomalu aplikovat a upřesňovat.
Myslím, že viditelnost bez použítí a dedičnosti se špatně chápe. Udividíme, kam se nakonec dostanu, rád bych hlavně na konci předvedl reálný projekt, který OOP využívá.
Moc informací o PHP a objektech není, takže budu určitě pokračovat.
Díky za pochvalu, hned má člověk lepší náladu ;)
Březen 6th, 2007 at 17.27
Fakt super stránky, jsi skvělej :o)
Březen 6th, 2007 at 17.32
Děkuji :)
Duben 17th, 2007 at 6.43
Takže jednička s hvězdičkou
Píšeš ty o věcech které jsou zajímavé.
, takže díky jdu číst další díl.
Neděkuj, děkovat mohou čtenáři
Prosinec 14th, 2007 at 13.34
Fakt dobrej blog, jen tak dál!
Únor 15th, 2009 at 15.28
OOP v PHP je celkom sranda .. nasiel tiez jeden zaujimavy clanok na
http://www.a-scripts.com/…ction-to-oop
Září 10th, 2010 at 23.49
< blockquote >< a href=„http://cheaptabletsonline.com/“>CheapTabletsOnline.Com. Canadian Health&Care.No prescription online pharmacy.Best quality drugs.Special Internet Prices. Online Pharmacy. Order drugs online< /a >…
Buy:Ventolin.Nymphomax.Aricept.Female Pink Viagra.Acomplia.Lipitor.Buspar.Amoxicillin.Wellbutrin SR.Lasix.Female Cialis.Prozac.Zocor.Advair.Zetia.SleepWell.Seroquel.Benicar.Cozaar.Lipothin…