Autor Zpráva
Návštěvník
Profil *
Mám tři třídy, které pracují na úplně stejném principu, jen se liší metody uvnitř (metody jsou check, single, two and three). Vlastnosti a konstruktor mají úplně stejný. Konstruktor vypadá takto:

http://paste.ofcode.org/JWFmiSLHnyUSidVkb8xCgW

Tak by mě zajímalo jak to udělat když chci zdědit konstruktor. Stačí napsat třídu kterou zdědím např. Class base a do ní uvést konstruktor, který bude ale odkazovat na neexistující členy, nebo mám napsat abstraktní třídu a jak by měla ta abstraktní třída vypadat? Taky jestli volání abstraktní třídy nebude pomalejší ve smyčce oproti normální obyčejné třídě. Jelikož třídy jsou určeny pro kontrolu podmínek během procházení pixelů obrazu.
Joker
Profil
Návštěvník:
Tak by mě zajímalo jak to udělat když chci zdědit konstruktor.
Konstruktor se dědí normálně jako jiné metody. Jestli odvozená třída má svůj vlastní konstruktor, může zděděný konstruktor zavolat přes parent::__construct();

Stačí napsat třídu kterou zdědím např. Class base a do ní uvést konstruktor, který bude ale odkazovat na neexistující členy
To samozřejmě nejde.
Operace specifické pro odvozené třídy by se měly dělat v metodách odvozené třídy.

Jinak sice nemáme úplný popis toho návrhu, ale zní to docela podezřele. Možná bude nějaký podstatně jednodušší způsob.
Návštěvník
Profil *
Joker:
Pro zjednodušení:
Mám tři třídy které budou v sobě mít jako objekty uložené nějaké data. Funkčně jsou velmi podobné. Pro zjednodušení:

PRVNÍ
Class token_1{
public $a,$b,$c,$method;
function __construct($method,$a,$b,$c){
$this->a=$a; $this->b=$b ; $this->c=$c; $this->method=$method;
}
public function callMeFirst($method){
// call my method here
}
public function one($a){ }
public function two($a, $b){ }
public function three($a, $b, $c){ }
}

DRUHÁ
Class token_2{
public $a,$b,$c,$method;
function __construct($method,$a,$b,$c){
$this->a=$a; $this->b=$b ; $this->c=$c; $this->method=$method;
}
public function callMeFirst($method){
// call my method here
}
public function one($a){}
public function two($a, $b){}
public function three($a, $b, $c){}
}

TŘETÍ
Class token_3{
public $a,$b,$c,$method;
function __construct($method,$a,$b,$c){
$this->a=$a; $this->b=$b ; $this->c=$c; $this->method=$method;
}
public function callMeFirst($method){
// call my method here
}
public function one($a){}
public function two($a, $b){}
public function three($a, $b, $c){}
}

Toto je základní struktura, která je stejná. V reálu jsou jen drobné rozdíly. Kód konstruktoru je taky delší. Hlavní rozdíl je v kódu uvnitř metod one, two, three
Návštěvník
Profil *
Ty objekty by se pak měly vytvořit takto:
$obj1 = new token_1($args..);
$obj2 = new token_2($args..);
$obj3 = new token_3($args..);

Ale mě není vůbec jasný jak tedy zavolat ten konstruktor té rodičovské třídy, když jde o to aby se nastavily členové v token_1, token_2, token_3. Měl bych jako do jednotlivých konstruktorů uvést
 __construct($args){
parent::__construct($args); // a on dokáže nastavit ty lokální členy zde?
}
?

Tzn. že ten konstruktor ze kterého dědím

 
public $a,$b,$c;
__construct($args){
$this->a,$this->b,$this->c
}
by měl nastavit token_1->a, token_1->b, token_1->c... ale říkal si že to nejde, tak k čemu volat parent::__contruct?
Joker
Profil
Návštěvník:
A proč tedy ty atributy (a, b, c) nemá bázová třída, jestli jsou všude stejné?

Jestli se liší jen implementací těch tří metod, proč odvozené třídy nemají přepsané jen ty tři metody?
Návštěvník
Profil *
Joker:
Já jsem o tom psal na začátku, a ptal se jestli je mám v té bázové třídě vytvořit to nebylo jenom ke konstruktoru. Takže je mám vytvořit všechny v té bázové třídě, pak už to teda nebudu dávat tam do těch co dědí. A volání rodičovského konstruktoru zevnitř konstruktoru jak si psal...
Joker
Profil
To co je společné pro všechny objekty bázové třídy bych dal do bázové třídy.

Takže jestli se odvozené třídy liší jen implementací těch tříd metod, může být všechno v bázové třídě a v odvozených třídách jen přepsaná ta implementace.
Návštěvník
Profil *
Ještě k té základní třídě. Nějak mi to dělá problémy. Mám tuto implementaci:

$lessSingle = new less_exceptions('single',null,0.500323723558,null,'s');0.500323723558, tj. velmi blízké bílé nebo šedé  
// less_exceptions/$lessSingle - vstupní hodnoty uvnitř jsou OK -> co se uložilo je to co jsem tam předal.

$Interval = new interval_exceptions( 'three', array('ll'=>array(array(12,12,79)),'ul'=>array(array(13,17,83))) ); // TADY JE PROBLEM
// interval_exceptions - vstupní hodnoty uvnitř jsou ty co jsem ukládal do $lessSingle! Jako by ty proměnné byly sdílené. Ale i tak, kdyby byly sdílené, nedává mi smysl proč se neuložily hodnoty co jsem předal do konstruktoru interval_exceptions

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