Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> MVC Podstawy
atomp3
post
Post #1





Grupa: Zarejestrowani
Postów: 126
Pomógł: 1
Dołączył: 31.03.2006

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


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





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


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. ?>


Ten post edytował Shili 22.07.2008, 13:26:44
Go to the top of the page
+Quote Post
atomp3
post
Post #3





Grupa: Zarejestrowani
Postów: 126
Pomógł: 1
Dołączył: 31.03.2006

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


czyli tak jakbym extendowal konstruktora? tylko czy wtedy nie zastapie obiektow z konstruktora pierwszego? czy beda one dostepne?

Ten post edytował atomp3 22.07.2008, 13:39:58
Go to the top of the page
+Quote Post
wrzasq
post
Post #4





Grupa: Zarejestrowani
Postów: 206
Pomógł: 18
Dołączył: 6.03.2006
Skąd: Szczecin

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


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.


--------------------
Go to the top of the page
+Quote Post
wlamywacz
post
Post #5





Grupa: Zarejestrowani
Postów: 535
Pomógł: 27
Dołączył: 3.05.2005

Ostrzeżenie: (20%)
X----


Dlaczego klasa admin dziedziczy klasę firmy przecież to bez sensu ?
Go to the top of the page
+Quote Post
atomp3
post
Post #6





Grupa: Zarejestrowani
Postów: 126
Pomógł: 1
Dołączył: 31.03.2006

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


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....
Go to the top of the page
+Quote Post
mike
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


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
Go to the top of the page
+Quote Post
atomp3
post
Post #8





Grupa: Zarejestrowani
Postów: 126
Pomógł: 1
Dołączył: 31.03.2006

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


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
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #9





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


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)


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
wlamywacz
post
Post #10





Grupa: Zarejestrowani
Postów: 535
Pomógł: 27
Dołączył: 3.05.2005

Ostrzeżenie: (20%)
X----


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

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 Aktualny czas: 20.08.2025 - 08:18