Autor Zpráva
kzkcz
Profil *
Zdravím,

řeším menší nepříjemnost. Určitě je to někdo chytrý, kdo mi řekne, že to nejde. :) Nebo třeba možná jde.

Mám třídu A - rodič všech dalších tříd.

abstract class A
{
  public function init()
  {
    foreach( get_class_vars(get_class($this)) as $key => $null )
    {
      if($key !== 'record')
      {
        $fnc = 'set' . ucfirst($key);
        $this->$fnc($this->record->$key);
      }
    }
  }
}

A pak další třídy, které jí dědí B,C. Pokud funkci umístím do B nebo C - funguje bezvadně. Z proměnné $this->record naseká data do jednotlivých metod setId() apod.

Teď nastává ten problém -> nechci duplikovat kód do každého dítěte třídy A. Proto jsem ho vložil do třídy A (jak je vidět z kódu). Ale ejhle rodič neumí pracovat s metodami a proměnnými svého dítěte. :/ V podstatě chci tuhle univerzální funkci jen mít v rodiči a používat jí v dětech.

Má to řešení? Nebo to nejde?
Alphard
Profil
Jak to používáte? Mně se zdá vše v pořádku

abstract class A
{
  public function init()
  {
    var_dump(get_class_vars(get_class($this)));
  }
}

class B extends A
{
    public $storage;
}

$b = new B();
$b->init();

vypíše
array(1) {
  ["storage"]=>
  NULL
}

Jen bych hned použil get_object_vars().


Teď jsem si uvědomil, že se takhle nedostanete na private členy, ale neměl by být problém použít protected.
kzkcz
Profil *
Bože já jsem vážně kretén. :D

Díky! Mezi svátky ke konci šichty toho bylo asi moc na můj malý mozeček.

Děkuji. Zítra vyzkouším. :)
kzkcz
Profil *
Samozřejmě vše funguje bez problémů. Školácká chyba. Ještě jednou díky.

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