Autor Zpráva
veseláč
Profil *
Dobrý den,
dělám e-shop a zjistil jsem, že je nepřehledné celou aplikaci narvat do jedné třídy, z jediného důvodu - soubor má víc než tisíc řádků a mě nebaví pořád scrollovat a hedat funkce. Chtěl bych teda tuto třídu rozdělit do více souborů, ale netuším, jak potom tyto soubory spojit v jedinou třídu. Příklad:

Mám soubor eshop1.php a v něm deklarovanou třídu Ceshop1
dále soubor eshop2.php a v něm třídu Ceshop2 atakdále

potřeboval bych teď v souboru eshop.php vytvořit třídu, která by zdědila všechny proměnné i metody ze souborů eshop1.php až eshop(n).php, abych k těmto metodám mohl přistupovat z jedné instance. Doufám, že existuje elegantnější metoda, než každé následující třídě zdědit minulou třídu až k souboru eshop.php (postupné dědění).

Děkuji za případné odpovědi
Mastodont
Profil
Mám soubor eshop1.php a v něm deklarovanou třídu Ceshop1
dále soubor eshop2.php a v něm třídu Ceshop2 atakdále

Obávám se, že jste vůbec nepochopil, o čem je objektové programování. Třída má vyjadřovat nějakou celistvou entitu, nějaký uzavřený celek s jedinečnými charakteristikami. Aplikace složená ze tříd Aplikace1, Aplikace2 .. AplikaceN, to je unikát.

Zkuste to normálně procedurálně, není nutné jít na všechno přes objekty.
veseláč
Profil *
Nebo ještě jinak, v souboru eshop.php budu mít:


class Ceshp
{

a sem bych nějak potřeboval hodit obsah souboru eshop1.php, eshop2.php atakdále, ale include nefunguje

}

Nevíte, jak bych to provedl? Jeden soubor je strašně nepřehledný.
joe
Profil
Mastodont
V OOP je dědění tříd naprosto normální, to je také jedna z výhod OOP. To, že si veseláč rozdělí svou aplikaci na jednotlivé třídy, které využije, proč ne.

veseláč
Umím dědit třídy akorát v Jave :-) V PHP nevím jak se to provádí.
Jan Tvrdík
Profil
joe
Podle toho, co veseláč napsal souhlasím s Mastodontem, tj, že veseláč nepochopil podstatu OOP.

veseláč
1. PHP nepodporuje vícenásobné dělení (tj. dědění od více tříd zároveň)
2. Jeden soubor je strašně nepřehledný.
– myslím, že 1000 řadků není zase tolik, viděl jsem i delší třídy
– pokud je skutečně potřeba třídu rozdělit, tak je potřeba vrátit se k návrhu a vymyslet, jak to rozdělit tak, aby na sebe vše logicky navazovalo
– více násobné dědění lze řešit pomocí skládání tj., že třída obsahuje vlastnost, která je objektem vkládané třídy
– rozdělit kód jen kvůli délce nemá s OOP skutečně nic společného. Pokud to návrch nevyžaduje, tak bych určitě nechal vše v jednom souboru
joe
Profil
Jan Tvrdík
Pravda, jen vím že od toho OOP je a dál to neřeším.

Nevím jestli teď nenapíšu nesmysly, ale proč to neudělat třeba následovně:

class Trida {

require_once('nejake_spolecne_metody.php');

require_once('nejake_spolecne_metody2.php');

require_once('nejake_spolecne_metody3.php');

}



Takto si to rozdělit, to by snad mělo fungovat nebo se pletu?

EDIT: Tak to je škoda, že tohle nefunguje. Zatím se mi ale nestalo, abych musel třidy nějak rozdělovat, zase takový pisatel nejsem :)
Jan Tvrdík
Profil
joe
AFAIK to fungovat nebude a skončí na chybě.
Mastodont
Profil
To fungovat nebude, viz první komentář shora na:

http://cz.php.net/manual/en/function.include.php
BetaCam
Profil
veseláč

Kravina buď si udělej pořádnej návrh a nebo se vykašli na OOP. Pokud neznáš základní věci tak se do toho nepouštej, protože to bude katastrofa.

joe
V OOP je dědění tříd naprosto normální, to je také jedna z výhod OOP. To, že si veseláč rozdělí svou aplikaci na jednotlivé třídy, které využije, proč ne.

Existuje takové pořekadlo když už nevíš a vypotřeboval si všechny možnosti jak to udělat použij dědění. Dědění je super věc, ale také dost svazuje. Ve většině případů je lepší třídy složit. Většina lidí co dnes začíná s OOP seká dědění úplně všude a pak sou vidět takové přírodní úkazy jako že:

VIEW dědí DBLayer
VIEW dědí USER dědí LOGIN dědí DBLayer

Když vidim takovéhle dědění tak si rvu vlasy i když žádné nemám.
Mastodont
Profil
VIEW dědí USER dědí LOGIN dědí DBLayer
To bych hrozně rád viděl taky!
BetaCam
Profil
Mastodont

Ono dnes hodně začátečníků má takovejhle přístup :
 Problém : Potřebuji doma rohlík

 Řešení : Postavím si doma na zahradě celou pekárnu, protože z té rohlík dostanu.

 ale už je většinou nenapadne, že by si ten rohlík mohli jen dojít koupit do pekárny.
veseláč
Profil *
Tak tuto metaforu jsem jaksi nepochopil, to máte z Dr. House? :))
joe
Profil
BetaCam
Tak odkud si je pak rveš? :-)

Já nedědím, ještě jsem se k tomu nedostal a nepotřeboval k ničemu, naštěstí :-)
dajusa
Profil
BetaCam
Plně souhlasím. Hodně lidí nepřemýšlí. Proč dělat věci jednoduše když to jde složitě, že?

veseláč
zjistil jsem že je nepřehledné dávat vše do jednoho souboru
tak to napiš tak ať je to přehledné

soubor má víc než tisíc řádků
Víc než tisíc řádků?? já mám třídu o 2764 řádcích...a myslím že je to jednodušší mít to v jednom souboru, protože když si chci vyhledat bějakou funkci tak radši vyscroluju pár řádků nahoru, než abych si musel pamatovat ve kterém z n souborů je zrovna daná funkce.

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:

0