Autor | Zpráva | ||
---|---|---|---|
gelfi Profil * |
#1 · Zasláno: 15. 8. 2007, 19:11:00
Cekal bych ze se vypise AB, ale vypise se AA. Konstruktor se zdedil, ale vola metodu predka. Metody jsou prece virtualni, tak by se mel podivat jestli jsem nepredefinoval metodu show() a pouzit ji. Jak to 'donutit' vypsat spravne AB, abych nemusel znovu opisovat konstruktor. Pozn: Volana metoda nemusi byt nutne v konstruktoru. Snad jsem to vysvetlil dobre. Diky |
||
ph@tE Profil * |
#2 · Zasláno: 15. 8. 2007, 21:58:20
gelfi
Stačí učinit metodu show() chráněnou a bude ti to vypisovat AB, přesně, jak si přeješ. Nevím, jestli jsou v PHP metody defaultně virtuální (neslyšel jsem o tom), ale řekl bych, že PHP sleduje přepisování metod pouze pokud jsou chráněné nebo veřejné. Jestliže jsou soukromé, pak PHP s prohledáváním zděděných tříd končí, protože metoda show() definovaná ve třídě A patří pouze třídě A a metoda show() definovaná ve třídě B zase pouze třídě B. Není proto možné zavolat metodu show() třídy B ze třídy A. |
||
gelfi Profil * |
#3 · Zasláno: 15. 8. 2007, 23:00:13
ph@tE
Diky. Strucne a jasne. Nasledujici kod uz vypisuje AB. To, ze jsou vsechny metody virtualni jsem sebral z PHP v objetí objektů (4) uplne dole: V PHP je celá situace snadnější: "virtuálními" jsou jednoduše úplně všechny metody. At z toho taky neco mas:) Problem byl vyresen. Dekuji |
||
gelfi Profil * |
#4 · Zasláno: 15. 8. 2007, 23:01:30
Uz opraveny kod:
|
||
Časová prodleva: 17 let
|
0