Autor Zpráva
papoušek
Profil *
Zdravím,

trochu jsem se zapletl do dědičnosti a potřeboval bych pomoct. Mám problém s následující situací.
Trida1 {
   public static function getData() {
      .....
   }
   public function main() {
      ....
      $data = self::getData();
      ....
   }
}

Trida2 extends Trida1 {
   public static function getData() {
      ...nova deklarace zdedene metody...
   }
}

$a = new Trida2();
$a->main();


Potřeboval bych, aby když volám u instance tridy Trida2 metodu main(), se použila metoda getData s deklarací z třídy Trida2 a ne z třídy Trida1. Věděl bych, jak tuto situaci vyřešit třeba v Delphi (označil bych rodičovskou metodu klíčovým slovem virtual a nově deklarovanou metodu slovem override), tady si ale nevím rady.
lordfrikk
Profil
Pokud se nemýlím, tak v PHP se tato funkčnost nazývá Late Static Binding. Původně měla být dostupná v PHP 5.2, bohužel jak to vypadá, nejdříve bude v PHP6. Viz a viz.
lordfrikk
Profil
Pokud se nemýlím, tak v PHP se tato funkčnost nazývá Late Static Binding. Původně měla být dostupná v PHP 5.2, bohužel jak to vypadá, nejdříve bude v PHP6. Viz a viz a viz.

Pak by to mělo jít takto:

Trida1 {
   public static function getData() {
      .....
   }
   public function main() {
      ....
      $data = static::getData();
      ....
   }
}

Trida2 extends Trida1 {
   public static function getData() {
      ...nova deklarace zdedene metody...
   }
}

$a = new Trida2();
$a->main();
papoušek
Profil *
To je velké zklamání. Avšak děkuji za odpověď.

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: