Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Dziedziczenie i zmiana wartości zmiennej rodzica?
Joachim Peters
post 24.12.2008, 12:21:32
Post #1





Grupa: Zarejestrowani
Postów: 196
Pomógł: 2
Dołączył: 1.03.2006

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


Otóż mam problem z zmianą wartości dla zmiennej rodzica, w klasie która dziedziczy.
  1. <?php
  2. $this->zmienna_rodzica = 'wartosc'; // nie dziala
  3. ?>

Co można na to poradzić i dlaczego takie ograniczenie?

Ten post edytował Joachim Peters 24.12.2008, 12:22:05
Go to the top of the page
+Quote Post
Cysiaczek
post 24.12.2008, 12:49:43
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Masz szczęście, że dziś wigilia... public/protected/private - tym się zainteresuj

Pozdrawiam


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
dr_bonzo
post 24.12.2008, 14:14:41
Post #3





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Pokaz kod, klasy i to jak je testujesz.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Joachim Peters
post 24.12.2008, 14:44:34
Post #4





Grupa: Zarejestrowani
Postów: 196
Pomógł: 2
Dołączył: 1.03.2006

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


Przykładowa klasa:
  1. <?php
  2.  
  3. class A {
  4.    public $var;
  5. }
  6.  
  7. class B extends A {
  8.    public function __construct() {
  9.        $this->var = 'test';    
  10.    }
  11. }
  12.  
  13. $a = new A();
  14. $b = new B();
  15.  
  16. echo 'Wynik: ' . $a->var . '.';
  17.  
  18. ?>

Testuje to przy pomocy najnowszego XAMPPa.
Go to the top of the page
+Quote Post
Cysiaczek
post 24.12.2008, 14:53:48
Post #5





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Nie ma prawa nie działać.
$b->var


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
nexik
post 25.12.2008, 00:57:08
Post #6





Grupa: Zarejestrowani
Postów: 14
Pomógł: 1
Dołączył: 23.12.2008
Skąd: Radzionków

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


wszystko dlatego ze klasa B dziedziczy po A i nie ma prawa zmieniac wartosci atrybutow rodzica. Gdyby do tego doszlo to bylby wielki balagan, w stylu wieleoktronego dziedziczenia w C++. Nie wiadomo byloby gdzie szukac bledow jezeli takie by sie pojawily smile.gif

Najlepiej jak sobie porownasz do ludzi smile.gif

Dziedziczysz geny po ojcu m.in. kolor włosów. Jak ty zmieniasz kolor włosów (farbujesz je) to twoj ojciec ma nadal ten sam kolor włosów co wcześniej smile.gif Jeżeli chcesz by ojciec zmienił kolorów włosów to musi on to sam zrobić smile.gif


--------------------
Tomasz Ślązok Nexik
http://www.nexik.net/
Go to the top of the page
+Quote Post
dr_bonzo
post 25.12.2008, 01:50:41
Post #7





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Cos pie*****sz.

  1. <?php
  2.  
  3. class A {
  4.   public $var;
  5. }
  6.  
  7. class B extends A {
  8.   public function __construct() {
  9.       $this->var = 'test';    
  10.   }
  11. }
  12.  
  13. $a = new A();
  14. $b = new B();
  15.  
  16. echo 'Wynik: ' . $a->var . '.';
  17.  
  18. ?>

Obiekty klasy B zmieniaja $var, a kolega wypisuje wartosc var obiektu $a (CHYBA, zamiast $b)


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
wrzasq
post 25.12.2008, 12:44:05
Post #8





Grupa: Zarejestrowani
Postów: 206
Pomógł: 18
Dołączył: 6.03.2006
Skąd: Szczecin

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


@nexik:

Cytat
wszystko dlatego ze klasa B dziedziczy po A i nie ma prawa zmieniac wartosci atrybutow rodzica.

jakto nie? to przeciez by sensu nie mialo, tylko prywatnych pol nie mozna zmieniac.

kolega po prostu nie zrozumial mechanizmu dziedziczenia. pola (jesli nie sa statyczne) sa tworzone dla kazdej instancji i fakt tworzenia klas potomnych nie wplywa nijak na instancje klasy bazowej. trzeba odrozniac klasy od obiektow.


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 26.04.2024 - 11:17