Autor | Zpráva | ||
---|---|---|---|
MaK Profil |
#1 · Zasláno: 21. 9. 2016, 09:21:54
Mám třídu A, třídu B a funkci getRoot:
class A { public function x() {} } class B extends A { public function x() {} public function y() {} } /** * @return A */ function getRoot() { // vrací instanci třídy A nebo B } Toto mohu určitě, o tom není sporu: getRoot()->x(); Ale mohu si dovolit toto? getRoot()->y(); Samozřejmě mohu si vypomoci berličkou: $r = getRoot(); if ($r instanceof B) $r->y(); Ale není takový přístup v rozporu s objektovým programováním? MaK |
||
nightfish Profil |
#2 · Zasláno: 21. 9. 2016, 10:36:18
MaK:
> Ale mohu si dovolit toto? getRoot()->y(); getRoot() vrací instanci A, tak nedává smysl volat y() .
> Samozřejmě mohu si vypomoci berličkou: > Ale není takový přístup v rozporu s objektovým programováním? Tady by se lépe radilo s konkrétním problémem, možná by šel objektový návrh vytvořit jinak/lépe. |
||
MaK Profil |
#3 · Zasláno: 21. 9. 2016, 12:02:24
nightfish:
Funkce getRoot() může vrátit instanci třídy A nebo instanci třídy B (B je potomek A). Myslím, aby to bylo košér, měla by být funkce y() definována již v bázové třídě A. Zdá se mi podivné, zjistit si typ třídy a podle toho volat funkci, která není v předcích obsažena. MaK |
||
Radek9 Profil |
#4 · Zasláno: 21. 9. 2016, 14:22:40
MaK:
Pokud má smysl, aby třída A měla metodu y, pak ano. Ale jak říkal nightfish, lepší by bylo popsat konkrétní problém. Na tom ti můžeme poradit lépe. |
||
Časová prodleva: 7 let
|
0