Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Złożenia klas w php
Forum PHP.pl > Forum > PHP > Object-oriented programming
JohnySpot
Dopiero niedawno zanzjaomiłem się porządnie z obiektowymi aspektami inzynierii programowania i w związku z php nasunęło mi się pewne "pytanie". Otóż. Czy można w php stosować złożenia klas?
Dziedziczenie nie zawsze jest logiczne. Na przykład, klasa kwadrat mogłaby z powodzeniem dziedziczyć po klasie prostokąt, jednak słabym pomysłem jest aby klasa prostokąt dziedziczyła po klasie punkt. Lepiej by było aby klasa prostokąt posiadała 4 składowe (zmienne) typu punkt zdefiniowane w innej klasie o nazwie punkt. Coś w stylu.

  1. <?php
  2. class punkt {
  3. /* ... */
  4. }
  5.  
  6. class prostakat {
  7.  a = new punkt;
  8.  b = new punkt;
  9.  c = new punkt;
  10.  d = new punkt;
  11. }
  12.  
  13. class kwadrat extends prostakat {
  14.  /* ... */
  15. }
  16. ?>


jak uzyskać takie coś w php ?
NuLL
Zapisu jak w prostokacie nie da sie uzyskac chyba ze stworzysz sobie te punkty w konstruktorze.
mike
Przenoszę z php Pro. na php5
Ludvik
  1. <?php
  2. class Point {
  3. public function __construct($x, $y) {
  4. $this->x = $x;
  5. $this->y = $y;
  6. }
  7.  
  8. public function getX() {
  9. return $this->x;
  10. }
  11.  
  12. public function getY() {
  13. return $this->y;
  14. }
  15.  
  16. protected $x;
  17. protected $y;
  18. }
  19.  
  20. class Rectangle {
  21. public function __construct(Point $topleft, Point $bottomright) {
  22. $this->topleft = $topleft;
  23. $this->bottomright = $bottomright;
  24. }
  25.  
  26. /* ... */
  27.  
  28. protected $topleft;
  29. protected $bottomright;
  30. }
  31.  
  32. class Square extends Rectangle {
  33. public function __construct(Point $topleft, $iWidth) {
  34. $this->topleft = $topleft;
  35. $this->bottomright = new Point($topleft->getX() + $iWidht, $topleft->getY() + $iWidth());
  36. }
  37. }
  38. ?>
dr_bonzo
Cytat
Czy można w php stosować złożenia klas?

No pewnie. Patrz post Ludvika.
Co do czterech punktow: to jest nadmiarowosc danych, rypniesz sie i masz czworokat zamiast prostokata. A dwa punkty sa zupelnie wystarczajace (patrz post Ludvika).
JohnySpot
Dobra wszystko pięknie, ale to nie jest żadne złożenie klas. Najwidoczniej poprostu się nie da qmam. Spoko. A szkoda :/ Jakoś dam rade smile.gif Dzięki !
Ludvik
Jak to nie jest złożenie? Prostokąt i punkty - agregacja, jeżeli mamy mówić ściśle. Kwadrat dziedziczy z prostokątu. I nie widzisz tu żadnych złożeń? Została tylko kompozycja, której na tym przykładzie nie da się pokazać.
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.