Heb ik een mooi OO model gemaakt voor een CMS in PHP, blijkt het dat PHP zich nogal slecht leent voor datsoort modellen.
BV. Ik maak gebruik van 1 database connectie in een klasse DBI die een verbinding maakt bij het eerste gebruik van de functie Query($a_qstr) daarin. Mijn klasse Core maakt een instantie van die DBI. Tevens heb ik een aantal soorten modules die een klasse Module extenden. Deze klassen krijgen ook een instantie in klasse Core. Om deze modules gebruik te laten maken van de database moet ik of core zelf of die dbi in de constructor van die modules meegeven. Het makkelijkst is dan om in module een functie Query(..) te maken die de querie doorgeeft aan $this->core->dbi of aan $this->dbi. Dan kan ik mijn queries uitvoeren door $this->Querie te gebruiken in die modules. Hetzelfde gaat op voor een ErrorHandler, Session, User en Template klasse. Zodoende wordt m'n klasse Module nogal groot en komen er een aantal functies in die door sommige modules niet gebruikt worden. Dit kost allemaal parsetime, beetje jammer...
Dan is het haast makkelijker om die objecten (DBI, User, ErrorHandler, Session en Template) global te maken en gebruik te maken van $GLOBALS['dbi']->Query() etc..
Opties zijn dus:
• Core meegeven aan modules, usage $this->core->obj->func() gebruiken
• Objecten global, usage $GLOBALS['obj']->func()
• Objecten meegeven aan modules, usage $this->obj->func
• Core of Objecten meegeven aan modules en in Module doorgeeffuncties schrijven, usage $this>func()
Beetje jammer dat de scope van php niet gezelfde werkt als die van java, irritant geneuzel met dat $this altijd..
Best een lastige keuze al met al... hoe maak ik mijn keuze?
BV. Ik maak gebruik van 1 database connectie in een klasse DBI die een verbinding maakt bij het eerste gebruik van de functie Query($a_qstr) daarin. Mijn klasse Core maakt een instantie van die DBI. Tevens heb ik een aantal soorten modules die een klasse Module extenden. Deze klassen krijgen ook een instantie in klasse Core. Om deze modules gebruik te laten maken van de database moet ik of core zelf of die dbi in de constructor van die modules meegeven. Het makkelijkst is dan om in module een functie Query(..) te maken die de querie doorgeeft aan $this->core->dbi of aan $this->dbi. Dan kan ik mijn queries uitvoeren door $this->Querie te gebruiken in die modules. Hetzelfde gaat op voor een ErrorHandler, Session, User en Template klasse. Zodoende wordt m'n klasse Module nogal groot en komen er een aantal functies in die door sommige modules niet gebruikt worden. Dit kost allemaal parsetime, beetje jammer...
Dan is het haast makkelijker om die objecten (DBI, User, ErrorHandler, Session en Template) global te maken en gebruik te maken van $GLOBALS['dbi']->Query() etc..
Opties zijn dus:
• Core meegeven aan modules, usage $this->core->obj->func() gebruiken
• Objecten global, usage $GLOBALS['obj']->func()
• Objecten meegeven aan modules, usage $this->obj->func
• Core of Objecten meegeven aan modules en in Module doorgeeffuncties schrijven, usage $this>func()
Beetje jammer dat de scope van php niet gezelfde werkt als die van java, irritant geneuzel met dat $this altijd..
Best een lastige keuze al met al... hoe maak ik mijn keuze?