Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dziedziczenie i zmiana wartości zmiennej rodzica?
Forum PHP.pl > Forum > PHP > Object-oriented programming
Joachim Peters
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?
Cysiaczek
Masz szczęście, że dziś wigilia... public/protected/private - tym się zainteresuj

Pozdrawiam
dr_bonzo
Pokaz kod, klasy i to jak je testujesz.
Joachim Peters
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.
Cysiaczek
Nie ma prawa nie działać.
$b->var
nexik
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
dr_bonzo
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)
wrzasq
@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.
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.