Autor Zpráva
MaK
Profil
Mám třídu A, třídu B a funkci getRoot:
1class A 
2
3  public function x() {}  
4}
5 
6class B extends A 
7
8  public function x() {}  
9  public function y() {}  
10}
11 
12/**
13 * @return A 
14 */
15function getRoot()
16{
17  // vrací instanci třídy A nebo B
18}
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();
if ($r instanceof B)
  $r->y();
$r = getRoot();
if ($r instanceof B)
  $r->y();

Ale není takový přístup v rozporu s objektovým programováním?

MaK
nightfish
Profil
MaK:
Ale mohu si dovolit toto?
getRoot()->y();
getRoot()->y();
Pokud 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
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
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.
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