![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 27.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Mam taki oto interfejs:
Oraz klasę abstrakcyjną:
Kiedy dziedziczę po klasie Fnc oraz implementuje jednocześnie interfejs, mogę utworzyć klasę pochodną bez konstruktora!
Jak zmusić aby klasa Pochodna musiała zawierać konstruktor? Gdy dodam jakąś funkcję do interfejsu też muszę ją zaimplementować w klasie Pochodna. Gdy klasa Pochodna nie dziedziczyłaby po Fnc, interfejs działa tak jak powinien i wymaga aby Pochodna miała konstruktor. Również kiedy usunę konstruktor z klasy Bazowej (Fnc) zgłaszany jest błąd, że nie ma konstruktora, co może sugerować, że konstruktor w klasie Pochodnej jest odziedziczony z klasy bazowej ( ![]() Pozdrawiam Ten post edytował bongdigibonbon 29.06.2007, 09:02:14 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 426 Pomógł: 32 Dołączył: 24.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
Nie rozumiem idei konstruktora w interfejsie, moze mi sie wydaje ale takich rzeczy sie nie robi
-------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Może dlatego, że konstruktor jest dziedziczony?
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) ![]() ![]() |
Dokladnie - klasa abstrakcyjna go implementuje. Przeciez jest cialo funkcji czy jest ona zaiplementowana.
-------------------- Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Oznacz konstruktor jako abstrakcyjny i implementuj w pochodnej.
Cytat Nie rozumiem idei konstruktora w interfejsie, moze mi sie wydaje ale takich rzeczy sie nie robi Wydaje Ci się :roll2: Można i nawet często się robi. Pozdrawiam. -------------------- To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness; chaotic, confused, vulnerability, to inform yourself. Think for yourself. Question authority. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) ![]() ![]() |
Pozatym http://www.php.net/~derick/meeting-notes.h...truct-signature - a to dopiero PHP6
![]() Ten post edytował NuLL 29.06.2007, 10:30:03 -------------------- Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 27.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Oznacz konstruktor jako abstrakcyjny i implementuj w pochodnej. Może to dziwne, ale akurat konstruktor w klasie bazowej (Fnc) zawiera potrzebny kod, nie mogę oznaczyć go jako abstrakcyjny. Może dlatego, że konstruktor jest dziedziczony? Przecież od wersji 4.0 konstruktory nie podlegają dziedziczeniu. Choć z przytoczonego przeze mnie przykładu tak można wnioskować :/ |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Cytat Przecież od wersji 4.0 konstruktory nie podlegają dziedziczeniu. Choć z przytoczonego przeze mnie przykładu tak można wnioskować :/ Oczywiście. Dlatego, skoro masz zaimplementowany konstruktor, to pochodna nie musi go implementować. Wymuszenie kontruktora za pomocą interfejsu objęło tylko klasę abstakcyjną - pochodna nie musi się stosować do interfejsu. Jeśli jednak w ciele konstruktora klasy pochodnej dodasz wywołanie parent::__construct(), to już musi uwzgledniać ono nagłówek wymuszany interfejsem. Pozdrawiam. -------------------- To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness; chaotic, confused, vulnerability, to inform yourself. Think for yourself. Question authority. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 27.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Wymuszenie kontruktora za pomocą interfejsu objęło tylko klasę abstakcyjną Przecież pisząc
implementuje interfejs dla klasy Pochodna a nie Bazowa. Czemu wymuszenie konstruktora objęło klasę abstrakcyjną Bazowa? Myślę, że wiele już zostało wyjaśnione więc mogę napisać tak: Co mam zrobić aby konstruktor był obligatoryjny w klasie Pochodna? |
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Przecież od wersji 4.0 konstruktory nie podlegają dziedziczeniu. Choć z przytoczonego przeze mnie przykładu tak można wnioskować :/ hmmm w takim razie dlaczego to:
powoduje wypisanie na ekranie:
? Co mam zrobić aby konstruktor był obligatoryjny w klasie Pochodna? Jedynym (chyba) wyjściem będzie usunięcie go z klasy macierzystej i implementacja w klasie pochodnej wraz z implementacją interfejsu:
W sytuacji gdy w klasieClass2 nie będzie konstruktora zostanie zgłoszony błąd:
Chyba do tego zmierzaliśmy ![]() PS: możesz również przenieść implementację interfejsu do klasy macierzystej (Class1) co chyba będzie wygodniejsze przy późniejszym rozroście hierarchii klas. Ten post edytował phpion.com 29.06.2007, 11:59:17 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 27.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 05:34 |