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:
1class A 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(); getRoot()->x(); Ale mohu si dovolit toto? getRoot()->y(); getRoot()->y(); Samozřejmě mohu si vypomoci berličkou: $r = getRoot(); $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()->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: 9 let
|
Toto vlákno je staré, již dlouho do něj nikdo nepřispíval.
Informace a odkazy zde uváděné už nemusejí být aktuální. Nechcete-li řešit zde uvedenou konkrétní otázku, založte si vlastní vlákno, nepište do tohoto. Vložíte-li sem nyní příspěvek, upoutáte pozornost mnoha lidí a někteří z nich si jen kvůli vám přečtou i všechny předcházející příspěvky. Předpokládáte-li, že váš text skutečně bude hodnotný, stiskněte následující tlačítko:
Běda vám, jestli to bude blábol.
0