Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Podstawy dziedziczenia klas w php
Forum PHP.pl > Forum > PHP
klapaucius
Witam. Zaczynam się bawić w programowanie obiektowe i napotkałem na swojej drodze pewien problem. Mianowicie mam taki kod:
  1. class pierwszaKlasa{
  2. function __construct(){
  3. $this->pierwsza_wlasciwosc;
  4. }
  5. }
  6. class drugaKlasa{
  7. function __construct(){
  8. $this->druga_wlasciwosc = $this->pierwsza_wlasciwosc; // (żeby ta druga właściwosc miala taka sama wartosc ja właściwosc z klasy pierwszej)
  9. }
  10. }


Jak zrobić, żeby powyższy kod był poprawny?
wookieb
  1. function __construct(){
  2. parent::__construct();
  3. $this->druga_wlasciwosc = $this->pierwsza_wlasciwosc; // (żeby ta druga właściwosc miala taka sama wartosc ja właściwosc z klasy pierwszej)
  4. }
Fifi209
Cytat(wookieb @ 12.11.2011, 23:10:53 ) *
  1. function __construct(){
  2. parent::__construct();
  3. $this->druga_wlasciwosc = $this->pierwsza_wlasciwosc; // (żeby ta druga właściwosc miala taka sama wartosc ja właściwosc z klasy pierwszej)
  4. }


Ale jak w takim kodzie:
  1. class pierwszaKlasa{
  2. function __construct(){
  3. $this->pierwsza_wlasciwosc;
  4. }
  5. }
  6. class drugaKlasa{
  7. function __construct(){
  8. $this->druga_wlasciwosc = $this->pierwsza_wlasciwosc; // (żeby ta druga właściwosc miala taka sama wartosc ja właściwosc z klasy pierwszej)
  9. }
  10. }


używać parent skoro brak tu rodziców?
klapaucius
oj przepraszam.. zrobiłem błąd... zapomniałem dodać "extends" przy drugiej klasie... Ma to wygladac tak:
  1. class pierwszaKlasa{
  2. function __construct(){
  3. $this->pierwsza_wlasciwosc;
  4. }
  5. }
  6. class drugaKlasa extends pierwszaKlasa{
  7. function __construct(){
  8. $this->druga_wlasciwosc = $this->pierwsza_wlasciwosc; // (żeby ta druga właściwosc miala taka sama wartosc ja właściwosc z klasy pierwszej)
  9. }
  10. }
wookieb
Wybacz, umknęło mi to. W takim przypadku nie ma takiej możliwości.
klapaucius
Nie da się?! O kurcze.. Nie ma żadnego sposobu, żeby daną właściwość z konstruktora jednej klasy zaimportować do drugiej klasy...? Przecież w takim razie po cholere całe to programowanie obiektowe... :|
wookieb
Zacznijmy od tego, że pytasz o dziedziczenie (nazwa tematu) a tutaj ono nie występuje. W takich sytuacjach jak ta cytuję słowa "nie wieszaj psów na tym czego nie rozumiesz". Nie da się tego wyjaśnić w 3 słowach po co jest programowanie obiektowe. To trzeba samemu zrozumieć i tyle.
Bags_Bunny
Nie jestem pewien czy rozumiem w czym problem.
  1. class A
  2. {
  3. protected $a; //*
  4.  
  5. public function __construct()
  6. {
  7. $this->a = 'qwe';
  8. }
  9. }
  10.  
  11. class B extends A
  12. {
  13. private $b; //*
  14.  
  15. public function __construct()
  16. {
  17. parent::__construct();
  18. $this->b = $this->a;
  19. }
  20.  
  21. public function getb()
  22. {
  23. return $this->b;
  24. }
  25. }
  26.  
  27. $b = new B();
  28. echo $b->getB(); //qwe
  29.  
  30. //* - bez tych linijek też działa, ale jest brzydko ;)

Chodzi o coś takiego?
Swoją drogą, zapewniam Cię, że jak zrozumiesz programowanie obiektowe, to je to docenisz.
klapaucius
Jak to dziedziczenie nie występuje? A czy słowo "extends" przy deklaracji drugiej klasy nie oznacza, iż "dziedziczy ona metody, właściwości itp z klasy potomnej"? Być może jestem w błędzie, ale próbuję to w jakiś sposób załapać...
wookieb
No nie występuje. Gdzie w twoim przykładzie masz "extends"?
Bags_Bunny
@wookieb: post #4, linia 6. Chyba zrozumiałeś wypowiedź klapauciusa w drugą stronę.
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.