Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]kompozycje
Forum PHP.pl > Forum > Przedszkole
ddddf
  1. class Foo
  2. {
  3. public $x;
  4. public function __construct()
  5. {
  6. $this->x = new X($this);
  7. //var_dump($this->x);
  8. }
  9.  
  10. public function footest()
  11. {
  12. return $this->x->test();
  13. }
  14. }
  15.  
  16.  
  17.  
  18. class X
  19. {
  20. public function __construct(Foo $c)
  21. {
  22. //echo '<pre>';
  23. // print_r($c);
  24. }
  25.  
  26. public function test()
  27. {
  28. return 'Xtest';
  29. }
  30.  
  31. }
  32.  
  33.  
  34. $a = new Foo;
  35. echo $a-> footest();


Czy to jest poprawna kompozycja i czy kompozycje polegają a tym, aby klasa X która ma jakieś ważne dane dla klasy Foo nie mogłaby mieć własnej instancji?

Czyli jeśli mam klasę Login która ma pobierać dane z klasy User, która sprawdza użytkownika, to klasa User ma w konstruktorze mieć klasę Login?

Nie bardzo ogarniam samo określenie kompozycji i to gdzie i w jakich przypadkach je stosować, a nigdzie nie znalazłem konkretnego wyjaśnienia, w języku PL w ogóle ich nie ma. Są tylko przykłady, jak powyższy ale nic poza tym.
Methestel
Kompozycja jest szczególnym przypadkiem agregacji.
Tutaj jest to dość dobrze wyjaśnione: Agregacja (programowanie obiektowe)

W PHP-ie nie masz możliwości zrealizować kompozycji bo nie ma zagnieżdzania klas.

Odnośnie twojego kodu:
- jest to agregacja (obiekty klasy Foo przechowują obiekt klasy X)
- nie jest to kompozycja (bo obiekt klasy X i Foo mogą istnieć niezależnie)
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.