| 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: 10 let
|
|||
0