NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.

Diskuze – Lekce 14 - Interface (rozhraní v PHP)

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Jan Štěch
Tvůrce
Avatar
Jan Štěch:23.8.2022 20:59

TL:DR:
Rozhraní má i v PHP své místo a může vám v reálných aplikacích dost pomoci. Bohužel ukázat takové použití bez předvádění složitějších projektů je celkem nemožné, a tak se k využívání rozhraní musíte dostat sami. Zkrátka si pamatujte, co rozhraní jsou a jak se používají a třeba ve správný okamžik odhalíte, že ho na daném místě máte použít. 😉

Plná verze:
Při programování webových aplikací v PHP se mi docela osvědčilo vytvořit si rozhraní DatabaseItem, které implementovaly všechny modely (viz MVC) reprezentující položky v databázi (Uzivatel, Komentar, Clanek) a předepisovalo metody jako:

  • save() - Vloží nebo aktualizuje danou položku v příslušné databázové tabulce podle vlastnosti $id
  • load() - Načte vlastnosti instance z příslušné databázové tabulky podle vlastnosti $id
  • delete() - Odstraní položku z databáze a unsetne všechny vlastnosti instance

Později se rozhraní změnilo na abstraktní třídu a všechny výše zmíněné metody již nepotřebovaly mít pro správnou funkci známé ID položky, avšak danou akci zkrátka provedly na jakémkoli řádku, u nějž se hodnoty ve sloupcích shodovali s hodnotami vyplněných vlastností instance. Šlo poté například vytvořit objekt Clanek jenom s vyplněnou vlastností URL a poté buďto načíst ostatní vlastnosti pomocí $clanek->load(), nebo článek smazat pomocí $clanek->delete(). URL sice v tomto případě byla unikátní hodnota, avšak při vyplnění většího množství vlastností, které nebyly pro každou položku unikátní to také fungovalo.

Jak jsem toto rozhraní a později abstraktní třídu vyvíjel se můžete podívat zde (rozklikněte si budoucí revize toho souboru). Nejnovější verze, která se rozrostla na 524 řádků dobře okomentovaného kódu máte tady: https://www.itnetwork.cz/…lighter/1498.

Jenom jsem poté narazil na problém, jak odlišovat hodnoty, které nejsou vyplněné/načtené z databáze od hodnot, které jsou v databázi uloženy jako NULL. Vyřešil jsem to tak, že jsem si udělal tuto třídu:

final class undefined {}

a její instance ukládal do vlastností, které nemám načtené. null jsem poté ponechal vlastnostem, které tak byly uložené i v databázi. Přišlo mi to jako docela elegantní řešení, i když odpověď na StackOverflow, která mi toto poradila dostala docela dost downvotů.

 
Odpovědět
23.8.2022 20:59
Avatar
Lucie Seguin
Člen
Avatar
Lucie Seguin:22.8.2023 17:22

Proč se v kurzu PHP pro začátečníky učíme věci, bez kterých se v PHP "v podstatě obejdeme" a ani sám tvůrce kurzu je "příliš nepoužívá" ?

 
Odpovědět
22.8.2023 17:22
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 22.