Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Dziedziczenie - problem
rstaciak
post 13.11.2012, 08:32:58
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 13.11.2012

Ostrzeżenie: (0%)
-----


Witam Was,

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ą
  1. A
w której mam zdefiniowaną metodę customConditions(...) i klasę B w której jest zdefiniowana metoda getBaseSql() oraz dziedziczy po klasie A.





mam klasę B dziedziczącą po klasie A. W klasie A mam zdefiniowaną metodę customConditions()

KLASA NADRZĘDNA
  1. class DbTable
  2. {
  3.  
  4. public function customConditions($where=1,$orderBy=1,$page=NULL,$limitByPage=NULL)
  5. {
  6.  
  7. [b]$allOrders = self::getBaseSql();[/b]
  8. if($where==1){
  9. $data=$allOrders;
  10. }else{
  11. $data=$allOrders;
  12. foreach ($where as $key => $value) {
  13. $data=$data->where($key,$value);
  14. }
  15. }
  16. if($orderBy!=1){
  17. $data=$data->order($orderBy);
  18. }
  19. if($limitByPage!=NULL AND $page!=NULL){
  20. $data=$data->limitPage($page,$limitByPage);
  21. }
  22. return ($this->fetchAll($data)->toArray());
  23. }
  24.  
  25. }


KLASA POCHODNA

  1. class Lorem extends DbTable
  2. {
  3. protected $_tableName = 'Lorem';
  4.  
  5. public function getBaseSql()
  6. {
  7. $query=$this->select()
  8. ->setIntegrityCheck(false)
  9. ->from(
  10. array('l' => $this->_tableName),
  11. array('*')
  12. )
  13. ->join(
  14. array('i' => 'Ipsum'),
  15. 'i.ipsum.id= l.ipsum_id',
  16. array('*')
  17. );
  18. return ($query);
  19. }
  20. }
  21.  


i przy wywołaniu

  1. ...
  2. $data = $this->_loremModel->customConditions($where_array,'i.ipsum_id desc');
  3. ...


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 ?
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 05:03