Autor | Zpráva | ||
---|---|---|---|
Flash Profil * |
#1 · Zasláno: 8. 12. 2007, 04:41:41
Hezký den přeju. Tak nějak sem v poslední době skejsnul u OOP v PHP a měl bych takovej začátečnickej dotaz. Budu mít tři soubory :
index.php : <?php require_once 'class1.php'; $render = new render; require_once 'class2.php'; $main = new main; ?> class1.php : <?php class render { public function write($message) { echo $message; } } ?> a class2.php <?php class main { function main () { } } ?> no a ted budu potřebovat zavolat v constructoru třídy MAIN metodu WRITE ze třídy RENDER. Abych se k této metodě dostal z třídy main musím jí zavolat staticky tedy : render::write('text'); jenže to mi zrovna dvakrát nevyhovuje. Jak lze přistupovat k metodám jiných tříd anichž bych je musel volat staticky?? Nepohrdnul bych ani článkem s tématikou volání metod, kdyby někdo o něčem věděl. Dik moc |
||
Keilew Profil |
#2 · Zasláno: 8. 12. 2007, 08:56:58
Z principu OOP je tato otázka blbost. Třída je soubor dat (proměnné) a metod (function) pro práci s nimi. Jakmile musíš pro práci s daty jedné třídy volat metodu třídy jiné, je obyčejně něco špatně. Často jde o tzv. těsnou vazbu. Takže by to chtělo nastudovat opravdové vlastnosti návrhů OOP, není to totiž jen o zabalení funkcí a proměnných do bloku s názvem class.
|
||
Flash Profil * |
#3 · Zasláno: 8. 12. 2007, 09:57:31
Keilew
Jakmile musíš pro práci s daty jedné třídy volat metodu třídy jiné, je obyčejně něco špatně. Ano jistě to chápu, ale to není zrovna tato situace. Nevolám metodu z jiné třídy, abych mohl pracovat s daty původní třídy. Volám metodu ze třídy, která nemá s tou druhou vůbec nic společného a ani nemá vliv na její funkci. Volám funkce, které slouží pro tvorbu log a debug souborů. |
||
Keilew Profil |
#4 · Zasláno: 8. 12. 2007, 10:22:41
Flash
Pak jedině static, nebo prostě volat nějakou funkci, která není součástí žádného modelu, nebo volat pořes instanci objektu. |
||
Joker Profil |
#5 · Zasláno: 8. 12. 2007, 10:23:41
Keilew
Já bych to trochu upřesnil: Metody jiné třídy ve svojí třídě používat jde- obvykle tak, že se z nich udělají metody té svojí třídy :-) Pokud funkčnost mojí třídy má obsahovat funkčnost jiné třídy, obvykle je to ze dvou důvodů: - ve skutečnosti ta moje třída i ta druhá patří do nějaké větší kategorie objektů, kterým je toto chování společné. Příklad: řekněme, že třída Motorka má metodu akceleruj(). Tu bych potřeboval i pro třídu Automobil. Ale ve skutečnosti akcelerace není funkčnost specifická pro motorku, ale obecná pro všechny dopravní prostředky (resp. pro jakýkoliv objekt, ale zjednodušme to). Pro takové situace je v OOP dědění: správné řešení by bylo zavést například třídu Dopravní prostředek, která by měla mj. metodu akceleruj() a třídy Motorka a Automobil by byly její specializace a metodu by zdědily. - ve skutečnosti je jedna z těch tříd součástí druhé. Například řekněme, že mám třídu Motor, která má metodu nastartuj() a chci jí využít i pro třídu Automobil. Ve skutečnosti je ale motor součástí automobilu s veškerou svou funkčností a atributy. Taková situace se v OOP řeší skládáním: třída Automobil by měla obsahovat atribut typu Motor. |
||
Keilew Profil |
#6 · Zasláno: 8. 12. 2007, 10:34:46
Joker
Ano, máš naprostou pravdu, jen jsem to nechtěl pitvat. Zahrnul jsem to do tvrzení, že by to chtělo nastudovat opravdové vlastnosti návrhů OOP;-) |
||
Časová prodleva: 16 let
|
0