Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Object-oriented programming _ wywołanie potomka w momencie wywołania rodzica

Napisany przez: StreetFighter 2.12.2019, 20:59:08

Witajcie, mam kod:

  1. class Rodzic{
  2.  
  3. public function iloscDzieci(){
  4.  
  5. http://www.php.net/echo 'nie mam dzieci';
  6. }
  7.  
  8. }
  9.  
  10.  
  11.  
  12. class Dziecko extends Rodzic{
  13.  
  14. public function iloscDzieci(){
  15.  
  16. http://www.php.net/echo 'mam jedno dziecko';
  17. }
  18.  
  19. }
  20.  
  21.  
  22. $test = new Rodzic();
  23. $test->iloscDzieci();



Czy jest jakaś możliwość wywołania dziecka wywołując klase rodzica, żeby echo wyświetliło mi ?:

mam jedno dziecko


edit: chodzi mi jakby o nadpisanie lub przesłonięcie metody

Albo inczej, jak z klasy rodzica dostać się do klasy dziecko?

Potrzebuje uzyskać coś takiego że Jak wywołam jakoś metode z klasy rodzica to uruchomie wszystkie metody z klas dziedziczących


  1.  
  2. class Rodzic{
  3.  
  4. public function lata(){
  5.  
  6. http://www.php.net/echo 40;
  7. }
  8.  
  9. }
  10.  
  11.  
  12. class SynTomek extends Rodzic{
  13.  
  14. public function lata(){
  15. http://www.php.net/echo 20;
  16. }
  17. }
  18.  
  19. class SynJuzek extends Rodzic{
  20.  
  21. public function lata(){
  22.  
  23. http://www.php.net/echo 15;
  24. }
  25. }
  26.  
  27.  
  28.  
  29.  


po wywołaniu Rodzic::lata() chce uzyskać wyjscie 402015

zakładając że rodzic nie wie jakie ma dzieci, więc jakby automatycznie to jakoś odczytać

chodzi mi dokładnie o to co chciał uzyskać markonix

http://forum.php.pl/index.php?showtopic=178479

czyli nie da rady w ten sposób

Napisany przez: Pyton_000 30.12.2019, 12:47:47

Nie odwołasz się do klasy dziecka z klasy rodzica bo te o sobie nic nie wiedzą. W drugą stronę się da.

Oczywiście dałoby się ale musiałbyś mieć autoloader np. z PSR4 potem znaleźć wszystkie klasy które extendują rodzica, stworzyć ich instancję i wywołać je.

Napisany przez: Tomplus 30.12.2019, 13:41:48

Co do słownictwa, to słowo `wiek` brzmiałby lepiej niż `lata`. W końcu po wywowałniu Rodzic::lata() oczekiwałbym wyniku: TAK, lata lub NIE, to nielot biggrin.gif

W programowaniu obiektowym nie jest celem aby tworzyć nadrzędną klasę której dodajemy dzieci. Spójrz na to z poziomu architekta lub anatoma.
np.

  1. class Ssak { }
  2.  
  3. class Czlowiek extends Ssak {}
  4. class Krowa extends Ssak {}
  5.  
  6. $rodzic = new Czlowiek;
  7. $rodzic -> imie = 'Stefan';
  8. $rodzic -> wiek = 33;
  9.  
  10. $syn = new Czlowiek;
  11. $syn -> imie = 'Janusz';
  12. $syn -> wiek = 6;
  13.  
  14. $zwierzak = new Krowa;
  15. $zwierzak -> imie = 'Mućka';


Coś w tym stylu. Inni mogą dać lepsze przykłady.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)