Ahoj. jde mi jen o váš přístup k vlastnostem a hlavně k metodám ,já používám hlavně namespace , interface (hlavne v modelových třídách) , DI,a pár dalších vzorů. Nechci se moc pouštět do dědění i když proti němu nic nemám a ani nemám nic proti traits, u dědičnosti i traits hned na začátku třídy vidím k čemu je vázána ale zkrátka nedědím a nepotřeboval jsem dědit ani u intranetu .Já jen namespacuju, interfacuju a depend. injectuju apod.: otázka je" jaké návyky máte Vy", a jestli máte nějaký argument pro používání dědičnosti => bezpečnost?, rozšiřitelnost?,atd.
Fórum › PHP
Namespace, interface, traits, extends
#1 truth
Co myslíš tím přístupem k vlastnostem? Mám je všechny privátní a z vnějšku k nim nemám žádný přístup.
Namespace používám tam, kde nechci, aby se název třídy skládal z více slov. To je pro mne jednoduchým vodítkem - přebytečná slova přemístím do namespace.
Interface se bezvadně hodí k typování parametrů metod při použití DI. Aplikace tím získá na robustnosti.
Pro traits jsem dosud nenašel uplatnění a popravdě se jim vyhýbám. Nikdy jsem je nepotřeboval. Doufám, že ani potřebovat nebudu.
Dědičnost normálně používám, ale jen tak, abych nepotřeboval slovo "protected". Dodržuji LSP. Pokud napíši nějaký controller, tak proč bych nemohl zdědit nějakou třídu Controller, která už bude mít potřebné metody a překrýt jen ty, které překrýt potřebuji?
#1 truth
Dědičnost používám jen výjimečně. Použvám ji v případě, kdy mám několik tříd implementující různá rozhraní, přičemž v implementacích se ale nacházejí podobné prvky (například tvorba zprávy pro logování, rozbor vyhozené výjimky na string,...). Potom pro takovou úroveň programu vytvořím abstraktní rodičovskou třídu, kde se tato společná logika nachází.
Jinak téměž vše řeším přes kompozici. Traits jsem v životě nepoužil, osobně ani nevím, k čemu jsou.
#3 ondrej39
Pro tu dědičnost nemáš zrovna nejlepší motivaci. Určitě bych nedědil třídu jen kvůli tomu, že má stejné logování. To stejně patří do další třídy.
Můžeš dědit jen třídy, u kterých můžeš prohlásit, že potomek je rodič, např. LogováníDoSouboru je Logování.
#8 Kit
Sdílení kódu použitím dědičnosti je skvělým důvodem, když se používá správně.
Existence něčeho jako Composition over inheritance je zapřičiněná pouze tím, že spousta lidí používá dědičnost tak, jak se používat nemá (například když máš třídu mající atributy A, B, C a D a chceš mít třídu mající atributy A, B, E a F, což logicky svádí na dědičnost, která je ale špatná, protože pak by potomek měl i atributy C a D, které mít nemá => kompozice v tomto případě řešením je).
#11 ondrej39
Možná máme na mysli totéž, ale neoznačuji to jako sdílení kódu, ale sdílení sémantiky.
Ovšem je úplně jedno, jaké mají ty třídy atributy - jsou privátní a nikdo k nim z vnějšku nemá přístup. Daleko důležitější je společné rozhraní.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Oop mvc extends — založil luboš
PHP OOP začátečník - extends — založil th
Class extends JFrame - nefunguji gettry — založil m
Interface <> Implementation — založil adamlevine
Interface - private — založil jkoudis
Moderátoři diskuze