Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problemy z dziedziczeniem metod
Forum PHP.pl > Forum > PHP > Object-oriented programming
Skyline
Witam!

Męcze się z tym już jakiś czas i nie moge nic wymyślić. Czy ktoś wie, dlaczego z klasy C nie mam dostępu do metody drukujA klasy A ? Będę wdzięczny za oświecenie mnie...

  1. <?php
  2.  
  3. class A
  4. {
  5. function drukujA()
  6. {
  7. echo 'Metoda klasy A';
  8. }
  9. }
  10.  
  11. class B
  12. {
  13. var $_a = null;
  14.  
  15. function __construct()
  16. {
  17. $this->_a = new A();
  18. $this->drukujB();
  19. }
  20.  
  21. function drukujB()
  22. {
  23. $this->_a->drukujA();
  24. }
  25. }
  26.  
  27. class C extends B 
  28. {
  29. function __construct()
  30. {
  31. $this->_a->drukujA();
  32. }
  33. }
  34.  
  35. $_C = new C();
  36.  
  37. ?>
nospor
zakladam ze uzywasz php5.

  1. <?php
  2. class C extends B 
  3. {
  4. function __construct()
  5. {
  6. parent::__construct();
  7. $this->_a->drukujA();
  8. }
  9. }
  10. ?>

Konstruktor klasy dziedziczonej sam sie nie wywola. musisz to zrobic recznie: parent::__construct();
mike
Jak tworzysz instancję klasy C to $_a nie jest zainicjowane.
Nie jest obiektem i dlatego wywala:
Cytat
Fatal error: Call to a member function drukujA() on a non-object ...
Nie oznacza to, że nie masz dostepu do metody tylko że nie ma takiego obiektu jak $_a.

Konstruktor klasy bazowej nie jest wywoływany domyślnie. Gdyby tak było to powyższy kod działałby bez zarzutu. Dlatego musisz dać tak:
  1. <?php
  2.  
  3. // ...
  4. class C extends B 
  5. {
  6. function __construct()
  7. {
  8.  
  9. parent::__construct();
  10. $this->_a->drukujA();
  11. }
  12. }
  13. // ...
  14.  
  15. ?>
albo:
  1. <?php
  2.  
  3. // ...
  4. class C extends B 
  5. {
  6. function __construct()
  7. {
  8.  
  9. $this->_a = new A();
  10. $this->_a->drukujA();
  11. }
  12. }
  13. // ...
  14.  
  15. ?>
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.