mam ostatnio dość dużą zagwozdkę odnośnie dziedziczenia mianowicie w praktycznie każdej klasie która odpowiada tabeli w bazie danych mam zdefiniowaną metodę customConditions(....) oraz getBaseSql(). getBaseSql() tworzy mi strukturę SQL wraz z ewentualnymi join'ami a customConditions(...) dołącza po prostu warunki, sortowanie, stronicowanie . Ze względu na to, że ciało customConditions(...) jest każdej klasie takie samo postanowiłem utworzyć klasę nadrzędną
w której mam zdefiniowaną metodę customConditions(...) i klasę B w której jest zdefiniowana metoda getBaseSql() oraz dziedziczy po klasie A.
A
mam klasę B dziedziczącą po klasie A. W klasie A mam zdefiniowaną metodę customConditions()
KLASA NADRZĘDNA
class DbTable { public function customConditions($where=1,$orderBy=1,$page=NULL,$limitByPage=NULL) { [b]$allOrders = self::getBaseSql();[/b] if($where==1){ $data=$allOrders; }else{ $data=$allOrders; foreach ($where as $key => $value) { $data=$data->where($key,$value); } } if($orderBy!=1){ $data=$data->order($orderBy); } if($limitByPage!=NULL AND $page!=NULL){ $data=$data->limitPage($page,$limitByPage); } return ($this->fetchAll($data)->toArray()); } }
KLASA POCHODNA
class Lorem extends DbTable { protected $_tableName = 'Lorem'; public function getBaseSql() { $query=$this->select() ->setIntegrityCheck(false) ->from( ) ->join( 'i.ipsum.id= l.ipsum_id', ); return ($query); } }
i przy wywołaniu
... $data = $this->_loremModel->customConditions($where_array,'i.ipsum_id desc'); ...
otrzymuje komunikat błędu o nie istniejącej metodzie getBaseSql() z której korzysta metoda customConditions poprzez self::getBaseSql().
Zmierzając do sedna, czy jest taka możliwość i jeśli tak to jaka by metoda klasy nadrzędnej korzystała z metody której ciało znajduje się w klasie pochodnej ?