Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [OOP] Dziedziczenie pól klasy
nu_moon
post
Post #1





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 26.01.2006

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Mógłbyś pokazać jakiś przykład użycia, tego co chcesz osiągnąć? Ewentualnie opisać sytuację?
Go to the top of the page
+Quote Post
DeyV
post
Post #3





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




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. }
Powód edycji: [DeyV]:
Go to the top of the page
+Quote Post
#luq
post
Post #4





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


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. }
Go to the top of the page
+Quote Post
nu_moon
post
Post #5





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 26.01.2006

Ostrzeżenie: (0%)
-----


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.

Ten post edytował nu_moon 26.09.2010, 19:11:35
Go to the top of the page
+Quote Post
dariuszp
post
Post #6





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 9.09.2010

Ostrzeżenie: (0%)
-----


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.

Go to the top of the page
+Quote Post
smentek
post
Post #7





Grupa: Zarejestrowani
Postów: 130
Pomógł: 11
Dołączył: 7.04.2003

Ostrzeżenie: (10%)
X----


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ć.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 27.09.2025 - 07:07