Autor Zpráva
CPBBT
Profil *
Na Trupíkově webu (http://blog.jakubmaly.cz/programovani/php/strankovani-v-php-a-mysql-pohodlne-a-univerzalne.aspx) je třída, která stránkuje vypis z databáze. Nemůžu pochopit jak lze v následující třídě volat metodu "prepareLink", která je defonovaná v jiné třídě.
Může mi to někdo vysvětlit?
Díky

abstract class PagerMode
{
  //vypsani jednoho linku
  public $ParentPager;
  public $TargetedPage;
  public $PageCount;
  
  public function Link($page, $anchoringText, $cssClass)
  {
    return $this->ParentPager->prepareLink($page, $anchoringText, $cssClass);
  }


Moderátor Majkl578: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
fuckin
Profil
abstract class PagerMode


Všimni si slovíčka abstract, abstraktní třída se neimplementuje, ale dědí (nemůže sama vytvářet instance).
Abstraktní třída je vždy pouze deklarována.

EDIT :: Zde se volá třída ParentPager, tedy třída která tuto třídu dědí. - pěkná kravina co jsem napsal :)
$this->ParentPager->prepareLink($page, $anchoringText, $cssClass);


Abstraktní třída je podobná rozhraní, kde narozdíl od abstraktní třídy definuješ jen jakousi strukturu, názvy proměnných a názvy metod, nic víc.

Kdyžtak se podívej třeba sem http://projektysipvz.gytool.cz/ProjektySIPVZ/Default.aspx?uid=240
CPBBT
Profil *
fuckin:
No pořád jsem z toho zmatený. Přece v té třídě je "public $ParentPager" pouze proměnná a ne třída, jak píšeš. Aby to šlo tak volat, tak by ParentPage musela být instancí třídy, která definuje metodu prepareLink. Ale to není. N
CPBBT
Profil *
fuckin;
Jde to ještě nějak jinak vysvětlit? Díky
fuckin
Profil
CPBBT:
Dobrá, napsal jsem to špatně. ParentPager je pouze členská proměnná. Která však může být instancí některé třídy v třídě, která tuto abstraktní třídu volá.

Musel bych prostudovat celý kód abych to řekl s jistotou.

Na tomto fóru je to krásně vysvětleno, viz příspěvek od rudyment http://forum.builder.cz/read.php?14,2955408

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0