Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: MVC Podstawy
Forum PHP.pl > Forum > PHP > Object-oriented programming
atomp3
Witam

Mam klase

  1. <?php
  2. class firmy {
  3.  
  4. function __construct() {
  5.  
  6. $this -> db = new db();
  7. $this -> tpl = new smarty();
  8. }
  9.  
  10. function wyswietl() {
  11. .....
  12. }
  13.  
  14. function dodaj() {
  15. ...
  16. }
  17.  
  18. }
  19. ?>


teraz mam druga ktora zarzadza CP firm.
  1. <?php
  2. class admin extends firmy {
  3.  
  4. function edytuj() {
  5. ..
  6. $this->db->query(....);
  7. }
  8.  
  9. function usun() {
  10. ..
  11. }
  12.  
  13. }
  14. ?>


1. W drugiej klasie nie moge uzyc juz kontruktora? poniewaz wtedy nie moge uzyc juz obiektow np db z pierwszej klasy?
2. Czy moj tok myslenia jest sluszny jesli chodzi o budowe aplikacji? czy lepiej bedzie klase admin odlaczyc i zrobic obiekt do pierwszej poprzez deklaracje w konstruktorze? czy lepiej extendowac?
3. jesli chcialbym aby byl MVC czy da sie zrobic model MVC wraz ze smarty?
Shili
Cytat
W drugiej klasie nie moge uzyc juz kontruktora? poniewaz wtedy nie moge uzyc juz obiektow np db z pierwszej klasy?
Możesz.

  1. <?php
  2. class admin extends firmy {
  3. function __construct() {
  4. parent::__contstruct();
  5. // dalsze instrukcje
  6. }
  7. ...
  8. }
  9. ?>
atomp3
czyli tak jakbym extendowal konstruktora? tylko czy wtedy nie zastapie obiektow z konstruktora pierwszego? czy beda one dostepne?
wrzasq
eh.. widzisz ta linijke?
  1. <?php
  2. parent::__contstruct();
  3. ?>

jak nie trudno sie domyslic wywoluje to konstruktor klasy bazowej, a po tym mozesz dodawac nastepne instrukcje.
wlamywacz
Dlaczego klasa admin dziedziczy klasę firmy przecież to bez sensu ?
atomp3
a mozna jasniej? czemu bez sensu? chcialbym miec dostep do metod w klasie firmy. To lepiej poprostu stworzyc do niej obiekt? ale wtedy musze deklarowac pozostale obiekty jeszcze raz w kalsie admin takie jak db i template itd....
mike
Nigdy ale to nigdy nie dziedzicz tylko po to by mieć dostęp do jakiejś metody. Dziedziczenie musi być logiczne. Ssak może dziedziczyć po Zwierze, Samochód może dziedziczyć po Pojazd, WebController może dziedziczyć po Controller, ...
... ale nie na przykład Produkt po BazaDabych czy to co Ty robisz.

Poczytaj sobie:
[oop] wywolanie jednej klasy z poziomu drugiej
[php]odwołanie się do funkcji z innej klasy
atomp3
Czyli reasumujac jesli chcialbym miec dostep do obiektu bazy danych powinienem taki obiekt za kazdym razem inicjowac w konstruktorze.

To samo sie tyczy jesli chcialbym miec dostep do metod z klasy np A w klasie B.

Dzieki za pomoc
Sedziwoj
Cytat(atomp3 @ 28.07.2008, 17:22:18 ) *
Czyli reasumujac jesli chcialbym miec dostep do obiektu bazy danych powinienem taki obiekt za kazdym razem inicjowac w konstruktorze.

To samo sie tyczy jesli chcialbym miec dostep do metod z klasy np A w klasie B.


Źle rozumiesz, jest wiele metod dostępu do bazy danych, w różny sposób, a inicjalizowanie w konstruktorze jest najmniej elastyczny. Poczytaj trochę tematów na tym podforum, zobaczysz w jaki sposób można radzić sobie z dostępem do bazy. (rejestr/singleton, czy też lepsze a trudniejsze metody wymagające dobrego planowania)
wlamywacz
Obsługa bazy nie jest uciążliwa jeśli system jest dobrze napisany, oto moje rozwiązanie:
  1. <?
  2. function __autoload($class) {
  3. require_once './class/' . $class . '.class.php';
  4. }
  5.  
  6. try {
  7.  
  8. $ini_array = parse_ini_file("config.ini", true);
  9.  
  10. $db = new db;
  11. $db->setParam('user', $ini_array['mysql']['user']);
  12. $db->setParam('pass', $ini_array['mysql']['pass']);
  13. $db->setParam('name', $ini_array['mysql']['name']);
  14. $db->setParam('host', $ini_array['mysql']['host']);
  15. $db->connect();
  16.  
  17. $action = new action;
  18. $action->setParam('defClass', $ini_array['action']['defClass']);
  19. $action->setParam('startClass', $ini_array['action']['startClass']);
  20. $action->setParam('explode', $ini_array['action']['explode']);
  21. $action->setParam('exceptions', $ini_array['action']['exceptions']);
  22. $action->action();
  23.  
  24. } catch (Exception $e) {
  25. echo 'Wystąpił błąd systemu <b>', $e->getMessage(), "</b>\n";
  26. }
  27. ?>


Połączenie występuje od razu przy starcie systemu i jest dostępne cały czas.
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.