Autor | Zpráva | ||
---|---|---|---|
WanTo Profil |
#1 · Zasláno: 11. 6. 2006, 10:20:04
Je možné v PHP4 používat abstraktní metody?
|
||
llook Profil |
#2 · Zasláno: 11. 6. 2006, 15:01:06
Ne, není.
|
||
WanTo Profil |
#3 · Zasláno: 11. 6. 2006, 16:51:52
A ještě jeden dotaz - budu mít dvě třídy, pro jednoduchost je pojmenujme Rodič a Syn.
Pak vytvořím novou instanci třídy Syn:
Která udelejNeco() se zavolá? Ta z Rodiče, ze Syna nebo vůbec žádná? |
||
mila Profil |
#4 · Zasláno: 11. 6. 2006, 17:01:28
Ne, není.
Není možno napsat k metodě slovo abstract. Jinak abstraktní metody klidně používat lze.
|
||
WanTo Profil |
#5 · Zasláno: 11. 6. 2006, 17:03:09
mila
To sice možná funguje, ale abstraktní to není :-) |
||
mila Profil |
#6 · Zasláno: 11. 6. 2006, 17:04:19
Která udelejNeco() se zavolá? Ta z Rodiče, ze Syna nebo vůbec žádná?
Ze syna. Bez toho by OOP přišlo o polovinu svých výhod. |
||
mila Profil |
#7 · Zasláno: 11. 6. 2006, 17:08:17
WanTo
Metoda není abstraktní, protože má u sebe slovo abstract, ale jak se používá. To že nemůže být přímo volána, je pomůcka pro programátora. Pokud ji člověk potřebuje, tak si do metody strčí ono triger_error. Pokud ne, napíšu si do komentáře, že je abstraktní, a dál to neřeším... |
||
Časová prodleva: 4 dny
|
|||
llook Profil |
#8 · Zasláno: 15. 6. 2006, 11:31:15
mila
O slovo abstract opravdu nejde (nakonec virtual v některých jazycích poslouží stejně dobře). Jde o to, že neimplementovaná abstraktní metoda je zdrojem chyby už při definici třídy. Tohle žádnou chybu nevyhodí: class Base {Zatímco tohle chybu vyhodí: abstract class Base { |
||
medden Profil * |
#9 · Zasláno: 15. 6. 2006, 20:20:02
WanTo
Povedal by som, že by ti to vyhodilo Fatal error: undefined function udelejNeco(), ale to len na okraj. Ak by si tam mal $this->udelejNeco(), tak ti to skutočne "aaa" vypíše. Ale ak by si tam mal self::udelejNeco(), tak nie, pretože pri self:: je volaná rodičovská funkcia, čo je dosti nepríjemné (ale niekedy sa s tým dajú robiť pekné fígle - hlavne pri prístupe k premenným triedy). V PHP6 by mala prísť možnosť volať ako static::udelejNeco(), čo by "aaa" vypísalo, teda zo Syna. |
||
thingwath Profil |
#10 · Zasláno: 15. 6. 2006, 20:26:48
Ze syna. Bez toho by OOP přišlo o polovinu svých výhod.
Třeba v C++ metody nejsou samy o sobě virtuální, tedy kdybych udělal Rodič r = new Syn (); r.metoda (); zavolá se ta z rodiče. Nicméně v dynamicky typovaném jazyku jako je PHP by to asi nedávalo moc smysl :-) |
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0