Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dziedziczenie - problem
Forum PHP.pl > Forum > PHP
rstaciak
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 ?
CuteOne
self odnosi się do metody klasy, która takowy self odpala

  1. class A {
  2.  
  3. public function aa() { self:: bb(); }
  4.  
  5. public function bb() { echo __CLASS__; }
  6. }
  7.  
  8. class B extends A {
  9.  
  10. public function cc() {
  11. $this->aa(); //zwróci A
  12. }
  13. public function bb() { echo __CLASS__; }
  14. }
  15.  
  16. $class = new B();
  17. $class -> cc();


  1. $allOrders = $this->getBaseSql();
rstaciak
o kurczę $this-> zaraz sprawdzę smile.gif


dzięki, wszystko działa jak powinno tyle nad tym siedziałem a zapomniałem, że $this-> tutaj będzie konieczne do użycia.

Temat uważam za zamknięty i serdecznie dziękuję, za pomoc.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.