ik heb jaren geleden wat van OOP geleerd met C++, en aangezien je daar multiple inheritance had had daar nooit het probleem waar ik nu tegenaan loop. ik programmeer nu in PHP5, maar ik denk dat mensen die Java kennen me ook wel goed kunnen helpen:
ik heb de volgende basis class-hierarchy:
Page is een class die heel basic XSLT transforms doet, Form een uitbreiding daarop die basic form-handling ondersteunt. De output is dus HTML, het gaat immers over een website
Elke pagina die in de website zit is een uitbreiding van Page of Form. Nou zit er in Page een method Page::setup(), waar voor-de-site-specifieke parameters worden gezet voor de XSL-transform. Dus eigenlijk wil ik deze functie abstract of stub maken, en een speciale uitbreiding van Page maken die deze functie implementeert, bijvoorbeeld GNL_Page:
maar die specifieke setup geldt natuurlijk ook voor alle formulieren:
Nu heb ik dus 2 classes die de method setup() moeten implementeren. Dat kan natuurlijk wel ranzig met copy-paste, maar ik wil uiteraard dat die code maar op 1 plek staat...
In C++ had ik een class GNL_XSLSetup gemaakt en:
gedaan. Maar dat kan met PHP5 natuurlijk niet. Ik dacht dat ik dat vast met een interface zou kunnen oplossen, maar ik mag blijkbaar helemaal geen code kloppen in methods van interfaces... (Interface function GNL_XSLSetup::setup() cannot contain body )
hoe los ik dit nou netjes op?
ik heb de volgende basis class-hierarchy:
code:
1
2
3
| DomDocument
+-Page
+-Form |
Page is een class die heel basic XSLT transforms doet, Form een uitbreiding daarop die basic form-handling ondersteunt. De output is dus HTML, het gaat immers over een website
Elke pagina die in de website zit is een uitbreiding van Page of Form. Nou zit er in Page een method Page::setup(), waar voor-de-site-specifieke parameters worden gezet voor de XSL-transform. Dus eigenlijk wil ik deze functie abstract of stub maken, en een speciale uitbreiding van Page maken die deze functie implementeert, bijvoorbeeld GNL_Page:
code:
1
2
3
4
| DomDocument
+-Page
+-GNL_Page
+-Form |
maar die specifieke setup geldt natuurlijk ook voor alle formulieren:
code:
1
2
3
4
5
| DomDocument
+-Page
+-GNL_Page
+-Form
+-GNL_Form |
Nu heb ik dus 2 classes die de method setup() moeten implementeren. Dat kan natuurlijk wel ranzig met copy-paste, maar ik wil uiteraard dat die code maar op 1 plek staat...
In C++ had ik een class GNL_XSLSetup gemaakt en:
code:
1
2
| GNL_Page extends Page, GNL_XSLSetup GNL_Form extends Form, GNL_XSLSetup |
gedaan. Maar dat kan met PHP5 natuurlijk niet. Ik dacht dat ik dat vast met een interface zou kunnen oplossen, maar ik mag blijkbaar helemaal geen code kloppen in methods van interfaces... (Interface function GNL_XSLSetup::setup() cannot contain body )
hoe los ik dit nou netjes op?