Ik heb een vraagje over een Singleton.
Ik heb een class in php genaamd Configuration. Dit is een singleton en bewaart zijn enige instance in een statisch veld en returned deze via een getInstance method, welke ook statisch is. Nu heb ik verder in deze class 1 normale method geimplementeerd, namelijk getValue(). Om een configuratie waarde op te halen voer ik nu dit uit:
Nu zat ik gister na te denken of een mogelijke verbetering, namelijk een extra statische functie implementeren met dezelfde naam als getValue(). Deze method roept dan voor mij de net genoemde regel aan en returned het resultaat. Dan zou ik dus dit krijgen:
Ik heb nog steeds de mogelijkheid om een instance van de classe op te halen en de functie 'normaal' uit te voeren.
Nu stuit ik hier op een probleem dat dit geheel niet mogelijk is omdat je geen twee functies met dezelfde naam mag implementeren met dezelfde parameters (of uberhaupt dezelfde naam, dat weet ik niet).
Dit vind ik zowiezo al vreemd omdat een statische functie alleen is aan te roepen met de class naam en :: (bv. Configuration::method()), en de method is alleen aan te roepen vanuit een instance (bv. $configInstance->method()). Onmogelijk om dan de verkeerde method te kiezen, dus ik zie het probleem niet zo.
Of zie ik dit al verkeerd?
Verder denk ik er dan aan om de getValue method geheel statisch te maken en de class geen singleton meer te maken.
Wat zijn de redenen om dit niet te doen?
Hoeft niet perse hier van op toepassing zijn, maar is het slecht om een class te hebben zonder non-statische methods en velden?
Of kan ik dit gewoon doen zonder dat ik problemen hoef te verwachten in de toekomst?
Ik heb een class in php genaamd Configuration. Dit is een singleton en bewaart zijn enige instance in een statisch veld en returned deze via een getInstance method, welke ook statisch is. Nu heb ik verder in deze class 1 normale method geimplementeerd, namelijk getValue(). Om een configuratie waarde op te halen voer ik nu dit uit:
code:
1
| Configuration::getInstance()->getValue("waarde"); |
Nu zat ik gister na te denken of een mogelijke verbetering, namelijk een extra statische functie implementeren met dezelfde naam als getValue(). Deze method roept dan voor mij de net genoemde regel aan en returned het resultaat. Dan zou ik dus dit krijgen:
code:
1
| Configuration::getValue("waarde"); |
Ik heb nog steeds de mogelijkheid om een instance van de classe op te halen en de functie 'normaal' uit te voeren.
Nu stuit ik hier op een probleem dat dit geheel niet mogelijk is omdat je geen twee functies met dezelfde naam mag implementeren met dezelfde parameters (of uberhaupt dezelfde naam, dat weet ik niet).
Dit vind ik zowiezo al vreemd omdat een statische functie alleen is aan te roepen met de class naam en :: (bv. Configuration::method()), en de method is alleen aan te roepen vanuit een instance (bv. $configInstance->method()). Onmogelijk om dan de verkeerde method te kiezen, dus ik zie het probleem niet zo.
Of zie ik dit al verkeerd?
Verder denk ik er dan aan om de getValue method geheel statisch te maken en de class geen singleton meer te maken.
Wat zijn de redenen om dit niet te doen?
Hoeft niet perse hier van op toepassing zijn, maar is het slecht om een class te hebben zonder non-statische methods en velden?
Of kan ik dit gewoon doen zonder dat ik problemen hoef te verwachten in de toekomst?
[ Voor 23% gewijzigd door Michali op 07-10-2004 16:35 ]