Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [OOP] Wybór dziedziczenia klas
Fallout
post 9.11.2008, 23:40:49
Post #1





Grupa: Zarejestrowani
Postów: 154
Pomógł: 0
Dołączył: 17.12.2003
Skąd: Olsztyn

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


Witam,

Sytuacja wygląda tak, że chcąc skorzystać z pełni możliwości OOP, mając na uwadze przyszłą rozbudowę mojego projektu zacząłem pisać klasy na wzór:

  1. <?php
  2. interface servers
  3. {
  4.  ... metody
  5. }
  6. ?>


i klasy implementujące w/w intefejs:

  1. <?php
  2. class a implements servers {}
  3. class b implements servers {}
  4. class c implements servers {}
  5. // i nie wiadomo ile innych
  6. ?>


i tu pojawił mi się problem. Taki sposób uniemożliwia deklarację wspólnych zmiennych (np. $dbh, $url) i definiowania metod prywatnych w interfejsie. Tworzenie osobnych nie implementowanych metod w każdej z klas mija się wtedy z celem,
bo przecież to samo mogę robić w rozszerzonej klasie. Z interfejsu chciałem korzystać, ze względu na możliwość ładnego planowania kodu.

Może ameryki nie odkryłem, jednak dopiero poznaję porządniej aspekty OOP w PHP5.

Tak więc jaki sposób kodowania wg. was będzie bardziej czytelny?

I jeszcze jedno pytanie na przyszłość:

Będę już miał napisane klasy a,b,c. I teraz jak się do nich odwoływać "na zawołanie". Czy robić coś w stylu:

  1. <?php
  2. switch($this->_rqst)
  3. {
  4. case 'a': $srv = new a($this->_dbh); break;
  5. case 'b': $srv = new b($this->_dbh); break;
  6. case 'c': $srv = new c($this->_dbh); break;
  7. }
  8. $srv->connect();
  9. ?>


lub

  1. <?php
  2. class jakisKontroler
  3. {
  4. ....
  5. private function _InitA()
  6. {
  7. $srv = new a($this->_dbh);
  8. return $srv;
  9. }
  10.  
  11. private function _InitB()
  12. {
  13. $srv = new b($this->_dbh);
  14. return $srv;
  15. }
  16.  
  17. public function init()
  18. {
  19.   ....
  20.   $srv = $this->_InitA();
  21.   return $srv;
  22.  
  23. }
  24. }
  25. ?>


czy może __autoload albo inny ciekawy sposób?

Ten post edytował Fallout 9.11.2008, 23:47:40


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
LBO
post 10.11.2008, 00:30:52
Post #2





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


Poczytaj o klasach abstrakcyjnych.

Co do współdzielenia zasobów przez te klasy, to już zależy od Ciebie i jak taki system zaimplementujesz.
Go to the top of the page
+Quote Post
phpion
post 10.11.2008, 07:56:34
Post #3





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Nawiązując do pierwszego pytania: klasa może równocześnie dziedziczyć po innej klasie oraz implementować dany interfejs (tudzież kilka interfejsów):
  1. <?php
  2. class KlasaNadrzedna extends KlasaPodrzedna implements Interfejs1, Interfejs2 {
  3.  
  4. }
  5. ?>
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 05:39