Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [OOP] Wybór dziedziczenia klas
Forum PHP.pl > Forum > PHP > Object-oriented programming
Fallout
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?
LBO
Poczytaj o klasach abstrakcyjnych.

Co do współdzielenia zasobów przez te klasy, to już zależy od Ciebie i jak taki system zaimplementujesz.
phpion
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. ?>
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.