Autor Zpráva
Oop
Profil *
Ahoj, potřeboval bych menší radu, hlavně s návrhem tříd. Mám třídu, která bude generovat formulář a třídu, která ho uloží do databáze. Potom mám interface s metodou Uloz.
Tady je zjednodušená ukázka:
interface Ukladani{
  public function Uloz($sql);
}
class Database implements Ukladani
{
  //Třída ukládá do databáze, je zde metoda, která navazuje spojení, napíšu tu třídu jenom zkráceně:
  public function Uloz($sql)
  {
    mysql_query($sql);
  }
}

class Formular implements Ukladani
{
  //Metody generujici formular, data z formulare se potom zpracují do sql dotazu a potom se předají metodě Uloz
  public function Uloz($sql)
  {
    //No a nevím co sem napsat, dají se takto předat data do třídy Database?
  }
}
Jde vůbec tohle řešit interfacem?
Casero
Profil
Oop:
No třída formulář nebude implementovat Ukladani, ale bude obsahovat třídu database, která se o uložení postará, hm?
Oop
Profil *
Jo to by taky šlo, ale spíš jsem myslel zkusit interface, budu mít víc tříd který budou potřebovat metodu Ulož takže tím rozhraním by to bylo hezčí ne? Jestli jsem dobře pochopil jak fungují, tak by to tak šlo, jenom nevím jak to právě napsat
Casero
Profil
Oop:
A který další třídy budou potřebovat Ulož? Nebude to vždy přes třídu database? Tady by se ten interface Ukladani hodil pro třídu Database, Soubor, a další způsoby uložení, které by tu metodu Ulož implementovali různě.
Oop
Profil *
No tak já asi pořád ty rozhraní nechápu, nejde třeba v jedný třídě mít implementovanou metodu a pak pomocí rozhraní jí předávat nějaká data z jiné metody?
Nox
Profil
Rozhraní nic nepředává, rozhraní jen říká, že daná třída je něčeho schopna ... je to kontrakt a deklarace pro ostatní třídy, které ví, že když dostanou tu třídu, tak že na ní mohou zavolat metody z toho interfacu
Oop
Profil *
A k čemu to je teda dobrý? Neměli byste nějaký jednoduchý příklad využití? Mě se zdá být úplně jedno, jestli mám tu metodu napsanou v rozhraní, nebo jestli jí jenom vytvořím v několika třídách. Skoro mi to připadá zbytečný
Nox
Profil
Třeba když si vytvoříš svou knihovnu v PHP a bude tam nějaká třída, ale budeš chtít umožnit, aby si ji uživatel knihovny nahradil bez problému svojí, tak uděláš interface. Uživatel uvidí co musí implementovat a zároveň bude knihovna vědět, že když do ní uživatel pošle tu třídu, tak že bude umět potřebné metody.

Anebo i u vlastních skriptů pro polymorfismus
Oop
Profil *
Ok, takže když já budu mít metodu v rozhraní, implementuju jí v nějaký třídě, potom tu knihovnu dostane uživatel, použije mojí metodu z rozhraní, bude to nějak ovlivnovat mojí třídu? nebo může využívat data z té třídy? Víte o co mi jde, zajímá mě, jestli to rozhraní má i jiný význam než jenom aby uživatel té knihovny věděl jaké metody má implementovat...
Casero
Profil
Oop:
Jak psal Nox, tak pro polymorfismus. Tzn. že třeba ta tvá třída formulář bude mít pro uložení metodu, která příjme jako parametr proměnou, která umí Ukladani - interface Ukladani. A tebe pak nemusí zajímat, zda to bude přes db nebo soubor, které by implementovali toto rozhrani.
Oop
Profil *
Aha tak děkuji za radu, už to snad chápu

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: