Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: klasa korzstająca z innych klas
Forum PHP.pl > Forum > PHP > Object-oriented programming
zzeus
Witam,
piszę sobie klasę Calculator która podczas obliczeń będzie korzystała z innych klas, np. Article.
W zależności od tego co kalkulator będzie obliczał będą potrzebne różne instancje klasy Towar, w sumie 5 sztuk. Mój pomysł żeby to zrobić tak:
  1. class Calculator
  2. {
  3. private $_objArticle1;
  4. private $_objArticle2;
  5. private $_objArticle3;
  6. private $_objArticle4;
  7. private $_objArticle5;
  8.  
  9. ...
  10.  
  11. public function setType($_strType)
  12. {
  13. case "k":
  14. $this->_objArticle1 = new Article();
  15. $this->_objArticle2 = new Article();
  16. break;
  17. case "c":
  18. $this->_objArticle3 = new Article();
  19. $this->_objArticle4 = new Article();
  20. break;
  21. case "kc":
  22. $this->_objArticle1 = new Article();
  23. $this->_objArticle2 = new Article();
  24. $this->_objArticle3 = new Article();
  25. $this->_objArticle4 = new Article();
  26. break;
  27. }
  28. }


W dalszej części klasa będzie korzystała z odpowiednich instancji klasy Article, czy ogólnie podejście jest dobre czy inaczej należałoby się to zabrać ?
erix
Mi tu pasują tablice, zamiast tylu zmiennych.
zzeus
Mogłaby być tablica, czy nawet kolekcja, ale tak mi się wydaje będzie czytelniej, oczywiście te nazwy zmiennych są przykładowe a w rzeczywistości opisują dokładniej obiekt.
erix
Ale to jest naprawdę mało sensowne. winksmiley.jpg

Jeśli jest struktura, która zawiera kilka takich samych zmiennych, to na 90% będzie potrzebna tablica.
Fifi209
Hmm, a może tak?

  1. <?php
  2.  
  3. class Calc {
  4.  
  5. public function __construct() {}
  6.  
  7. }
  8.  
  9. interface iCalc {
  10. public function x();
  11. }
  12.  
  13.  
  14. class Article extends Calc implements iCalc{
  15.  
  16. // tutaj robisz z kalkualtorem co chcesz
  17.  
  18. }
  19.  
  20. class Factory {
  21.  
  22. public function __construct($type) {
  23. switch ($type) {
  24. case 'k':
  25. return new Article();
  26. break;
  27.  
  28. default:
  29. return false;
  30. break;
  31. }
  32. }
  33.  
  34. }
  35.  
  36.  
  37. ?>
zegarek84
przykład jest trochu zbyt ogólny i nie pokazuje logiki jaką chcesz osiągnąć winksmiley.jpg
mowa tutaj o wymianie "podalgorytmu" - akurat do tego nadaje się strategia, jednak obiekt ma chyba w sobie zawierać także kilka innych klas by stanowić pełną funkcjonalność - więc fasada...

akurat do podawania odpowiednich klas w zależności od sytuacji (sterowania "procesami") nadaje się przykłąd podany przez Fifi209 czyli fabryka zwracająca odpowiednią klasę w zależności od sytuacji...
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.