Als ik in mijn scripts een klasse heb waarin een bepaald object wordt gebruikt (zoals een databaseconnectie object dat in meerdere klassen gebruikt wordt) dan los ik dit nu nog op door middel van get opslaan van het database object als globale variabele. Nu hoor ik steeds dat dit niet netjes OOP is en nu vraag ik me af wat de netste manier is om bijvoorbeeld het database object beschikbaar te krijgen in alle klassen die deze nodig hebben.
Gewoon een nieuwe instantie maken op het moment dat je een databaseconnectie nodig bent. Als je per se maar 1 database-object wilt hebben, kun je je verdiepen in het singleton-pattern. Die zorgt ervoor dat je altijd maar 1 object hebt in je applicatie. Voor een voorbeeld implementatie hiervan kun je kijken op Singleton
Maar stel dat ik een object heb dat meerdere instanties heeft en waarvan ik een bepaalde instantie nodig heb in bepaalde klassen, moet ik dan toch steeds een nieuwe instantie gaan aanmaken?
Wat je nodig hebt is, zoals * Sybr_E-N al aangaf, het singleton pattern, waar werkelijk een heleboel over te vinden is
.
Het singleton pattern heb ik al geimplementeerd en dat moet inderdaad wel werken. Ik vroeg me alleen af wat nu als er in ditzelfde geval meerdere instanties moeten bestaan.
Is er trouwens nog een nette manier om het steeds maar weer includen van de classfile voor het aanmaken van een klasse instantie aan te pakken?
Is er trouwens nog een nette manier om het steeds maar weer includen van de classfile voor het aanmaken van een klasse instantie aan te pakken?
Je zou zoiets als een registry pattern kunnen implementeren, wat dan alle instanties van bijvoorbeeld je database access instanties verzameld, alleen moet je dan wel de naamgeving standaardiseren zodat een andere klasse weet wélke instantie hij moet opvragen uit de registry class. Die registry moet dan zelf overigens een singleton zijnVerwijderd schreef op vrijdag 17 maart 2006 @ 12:00:
Het singleton pattern heb ik al geimplementeerd en dat moet inderdaad wel werken. Ik vroeg me alleen af wat nu als er in ditzelfde geval meerdere instanties moeten bestaan.
http://nl2.php.net/manual/en/language.oop5.autoload.phpIs er trouwens nog een nette manier om het steeds maar weer includen van de classfile voor het aanmaken van een klasse instantie aan te pakken?
Verwijderd schreef op vrijdag 17 maart 2006 @ 12:00:
Het singleton pattern heb ik al geimplementeerd en dat moet inderdaad wel werken. Ik vroeg me alleen af wat nu als er in ditzelfde geval meerdere instanties moeten bestaan.
Het singleton pattern zorgt ervoor dat er van een bepaald class slechts 1 instantie bestaat...
http://nl2.php.net/manual/en/language.oop5.autoload.phpIs er trouwens nog een nette manier om het steeds maar weer includen van de classfile voor het aanmaken van een klasse instantie aan te pakken?
[ Voor 17% gewijzigd door Andre-85 op 17-03-2006 12:08 ]
Lorem
Whenever we feel the need to comment something, we write a method instead. - Martin Fowler
People who think they know everything really annoy those of us who know we don't - Bjarne Stroustrup
Andre: Ik bedoelde ook voor niet-singleton klassen.
Dat registry pattern ken ik nog niet, bedankt voor de tip ik ga er eens na kijken.
Die autoload functie is wel handig, alleen heb ik een hele folder structuur waarbij de klassen vaak weer in een andere folder zitten... Werkt het trouwens als ik die functie in een (geinstantieerde) klasse onderbreng?
Dat registry pattern ken ik nog niet, bedankt voor de tip ik ga er eens na kijken.
Die autoload functie is wel handig, alleen heb ik een hele folder structuur waarbij de klassen vaak weer in een andere folder zitten... Werkt het trouwens als ik die functie in een (geinstantieerde) klasse onderbreng?
[ Voor 13% gewijzigd door Verwijderd op 17-03-2006 12:16 ]
Volgens mij biedt dit daar een oplossing voor: http://jaap.deviousness.c...s/engine/php/autoload.phpVerwijderd schreef op vrijdag 17 maart 2006 @ 12:14:
Die autoload functie is wel handig, alleen heb ik een hele folder structuur waarbij de klassen vaak weer in een andere folder zitten...
Je kunt ook prima een singleton hebben die meer als een instantie toestaat, hoor.Andre-85 schreef op vrijdag 17 maart 2006 @ 12:06:
Het singleton pattern zorgt ervoor dat er van een bepaald class slechts 1 instantie bestaat...
Registry is erg handig, daarmee kun je toegang tot andere instanties van classes geven, zonder dat je van hen een singleton maakt. Het wordt helemaal handig als je de registry (en dus de clients ook verder) afhankelijk maakt van een interface ipv. een directe class, dan kun je hem later ook nog eens uitwisseleen. Het komt dan natuurlijk gewoon op gedisciplineerd werken aan om niet direct instanties te maken, maar gewoon de Registry te gebruiken.Verwijderd schreef op vrijdag 17 maart 2006 @ 12:14:
Andre: Ik bedoelde ook voor niet-singleton klassen.
Dat registry pattern ken ik nog niet, bedankt voor de tip ik ga er eens na kijken.
Ik had ook een probleem met classes in folders. Dat heb ik opgelost door een scripje te maken die de gehele directory afscant en een lijst van classes en hun paden maakt. Op basis daarvan genereer ik dan weer een script inclusief die __autoload functie, welke ik later dan include in scripts die toegang tot classes nodig hebben. Je hoeft dan alleen even het script te runnen als je een nieuwe class toevoegt en dan ben je klaar.Die autoload functie is wel handig, alleen heb ik een hele folder structuur waarbij de klassen vaak weer in een andere folder zitten... Werkt het trouwens als ik die functie in een (geinstantieerde) klasse onderbreng?
[ Voor 6% gewijzigd door Michali op 20-03-2006 09:02 ]
Pagina: 1