Są sobie 3 obiekty:
StdObj
Produkt
Produkt_extendent
dziedziczą jeden po drugim.
i teraz taka sytuacja - chcę zwrócić listę w pełni wypełnionych obektów z bazy
<?php
class Produkt extends StdObiekt{
protected $produkt_id = -1;
protected $produkt_nazwa = -1;
protected $produkt_dostepnosc_id = -1;
protected $produkt_typ_id = -1;
public function __construct($param = null){
parent::__construct($param);
}
public function __construct_from_assoc
(array $t_prod){ $this -> set('produkt_nazwa', $t_prod['produkt_nazwa']);
$this -> set('produkt_data_dodania', $t_prod['produkt_data_dodania']);
$this -> set('produkt_dostepnosc_id', $t_prod['produkt_dostepnosc_id']);
}
public function dbPobierz($id = null){
if(isset($id)) $sql_id = 'WHERE produkt_id = ''.$id.''';
$sql = 'SELECT * FROM produkt '.$sql_id;
$t_produkt = getAssoc($sql);
$this -> __construct_from_assoc($produkt);
return true;
}
}
class Produkt_ext extends Produkt{
public $Produkt_ext_id = -1;
public $Produkt_ext_nazwa = -1;
public $Produkt_ext_opis = null;
public $Produkt_ext_xml = null;
public $czy_jest_zestawem = 0;
public $t_zestaw = array();
public function __construct($param = null){
parent::__construct($param);
}
public function __construct_from_assoc
(array $t_param){
$this -> set('produkt_id', $t_param['produkt_id']);
$this -> set('Produkt_ext_id', $t_param['Produkt_ext_id']);
$this -> set('Produkt_ext_nazwa', $t_param['Produkt_ext_nazwa']);
$this -> set('Produkt_ext_opis', $t_param['Produkt_ext_opis']);
$this -> set('Produkt_ext_xml', $t_param['Produkt_ext_xml']);
}
public function dbPobierz($id = null){
if(isset($id)) $sql_id = 'WHERE Produkt_ext_id = ''.$id.''';
$sql = 'SELECT * FROM Produkt_ext '.$sql_id;
$t_Produkt_ext = getAssoc($sql);
$this -> __construct_from_assoc($Produkt_ext);
parent::dbPobierz($this->produkt_id);
if($this -> czy_jest_zestawem) $this -> pobierzElementyZestawu();
return true;
}
}
?>
no i jedziemy z koksem:
<?php
prod_ex = New Produkt_extendent();
prod_ex -> dbPobierz('1');
?>
No i jest dupa - bo w metodzie Produkt_ext -> dbPobierz() wywołuję parent::dbPobierz($this->produkt_id); a w dbPobierz() już nie wykonuje się __construct_from_assoc() z Produkt - tylko z Produkt_ext.
Nie mogę wrzucić do $Produkt->dbPobierz() zamiast $this -> __construct_from_assoc($produkt); dać parent no bo to nie logiczne i przestanie mi działać....
No any way.... to jakaś lipa....
W skrócie jeszcze raz
W poziomu Produkt_ext wywołuję parent::dbPobierz. W ciele klasy Produkt jest wywoływana metoda __construct_from_assoc (ale Produkt_ext też ma metodę __construct_from_assoc) no i wywołuje się ta z Produkt_ext a nie z Produkt.
Jakaś rada??