Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [OOP] Dziedziczenie pól klasy
Forum PHP.pl > Forum > PHP > Object-oriented programming
nu_moon
Witam,

Mam taki oto problem. Mam klase główną, której konstruktor tworzy obiekty 3 innych klas czyli coś takiego:

  1. class Klasa_Glowna {
  2.  
  3.  
  4. public $obj1 = NULL;
  5. public $obj2 = NULL;
  6. public $obj3 = NULL;
  7.  
  8. public function __construct(){
  9.  
  10. $this->obj1 = new Klasa_1();
  11. $this->obj2 = new Klasa_2();
  12. $this->obj3 = new Klasa_2();
  13.  
  14. }
  15.  
  16.  
  17.  
  18. }
  19.  



I teraz pytanie, jak osiągnąć taki efekt, żeby pola obiektów stworzonych w klasie (Klasa_1 , 2 i 3 dziedziczą po klasie głównej). Były dostępne dla wszystkich pozostałych obiektów ?
Crozin
Mógłbyś pokazać jakiś przykład użycia, tego co chcesz osiągnąć? Ewentualnie opisać sytuację?
DeyV
Możesz zrobić coś takiego:

  1. class Glowna {
  2. public $Object1;
  3.  
  4. function __constuct( ){
  5. $this->Object1 = new XXX( $this );
  6. }
  7. }
  8.  
  9. class XXX{
  10. public $Glowna;
  11.  
  12. function __consctuct( Glowna $Glowna ) {
  13. $this->Glowna = $Glowna;
  14. }
  15. }
#luq
Może o coś takiego Ci chodzi?

  1. class Klasa_1
  2. {
  3. public function __construct( Klasa_Glowna $main ){
  4. // dostep do obektu klasy Klasa_2 za pomoca
  5. // $main->obj2->(...)
  6. }
  7. }
  8.  
  9. class Klasa_Glowna {
  10.  
  11.  
  12. public $obj1 = NULL;
  13. public $obj2 = NULL;
  14. public $obj3 = NULL;
  15.  
  16. public function __construct(){
  17.  
  18. $this->obj1 = new Klasa_1( $this );
  19. $this->obj2 = new Klasa_2( $this );
  20. $this->obj3 = new Klasa_2( $this );
  21.  
  22. }
  23. }
nu_moon
Co chciałem uzyskać, chciałem w miare wygodny sposób w klasa_1, 2 i 3 mieć dostęp do wybranych pól i metod dowolnej z tych klas.

Najbliżej tego rozwiązania był #luq ale pozostają 2 pytania:
- jaka jest wydajność pod kątem prędkości i zajętości pamięci takiego rozwiązania.
- jeśli takich klas będzie kilkadziesiąt będzie to spory problem (na razie czysto teoretycznie ale zawsze jest to problem)


W frameworku Kohana widziałem coś podobnego, np helpery i klasa rejestru jest bardzo ładnie dostępna za pomocą metod i pól statycznych ale nie do końca udaje mi się taką funkcjonaność odtworzyć. Zastanawiam sie nad podobnym mechanizmem ale dla standardowych (nie statycznych) metod.

Co jeśli do pola statycznego klasy głównej przypiszę jakiś konkretny obiekt ? W jaki sposób odwołać się do takiej konstrukcji ?

EDIT: #luq, chyba to dokładnie to o co mi chodziło , dzieki. W każdym razie jeśli ktoś ma inne propozycje to w celach edukacyjnych chętnie przeczytam.
dariuszp
Problemów takie rozwiązanie nie stwarza bo w PHP obiekty domyślnie są przekazywane przez referencje. Mówiąc językiem C++, przekazujesz tylko wskaźnik do obiektu.
A problemu przecież nawet z kilkudziesięcioma klasami być nie powinno. Chyba że masz zamiar robić to ręcznie. Wtedy możesz się co najwyżej opisać ale osobiście sugerował bym skorzystać z wzorców projektowych.

smentek
Cytat(nu_moon @ 26.09.2010, 17:15:34 ) *
I teraz pytanie, jak osiągnąć taki efekt, żeby pola obiektów stworzonych w klasie (Klasa_1 , 2 i 3 dziedziczą po klasie głównej). Były dostępne dla wszystkich pozostałych obiektów ?


Nie należy tego robić.
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.