Verschil tussen static en normale classes
Wat is het verschil tussen static en normale classes?
Ik weet al dat je static classes gewoon kunt aanroepen met :: maar wat is daar het nut van? Ik weet wel dat het gemakkelijk kan zijn als je met een database class werkt en als je niet iedere x een nieuwe connectie wilt openen.
Maar zou het een goed idee zijn om een static class te gebruiken voor een template class zodat ik bv template::header() en template::footer() zou doen of zou het beter zijn als ik gewoon $template->xx doe?
Groetjes
Dan blijft dus juist de functie over.
van daar ook ...
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$mijn_object->mijn_functie() // hier heb je binnen de functie mijn_functie de $this-> variabelen ter beschikking
// tegenover
Mijn_class::mijn_static_functie() // Je spreekt hier de functie aan via de class naam, niet voa het object. Je hebt dan ook geen ingevulde waarden aangezien er geen object is dat je aanspreekt
?>
$mijn_object->mijn_functie() // hier heb je binnen de functie mijn_functie de $this-> variabelen ter beschikking
// tegenover
Mijn_class::mijn_static_functie() // Je spreekt hier de functie aan via de class naam, niet voa het object. Je hebt dan ook geen ingevulde waarden aangezien er geen object is dat je aanspreekt
?>
Gewijzigd op 27/02/2012 09:35:47 door Kris Peeters
Code (php)
Het grootste voordeel is dat je geen instance hoeft aan te maken. Hierdoor kun je lazy loading (wat ik in het voorbeeld hierboven doe) gebruiken en andere handige dingen.
Voor je template klasse kun je beter gewone method gebruiken. Want deze methods zijn echt eigenschappen van de klasse (al zou ik wel getHeader gebruiken i.p.v. header()). Static methods/variabele zijn eigenlijk geen eigenschappen van een klasse. Ze horen wel bij de klasse, maar hebben geen toegang tot de eigenschappen.
Wouter J op 27/02/2012 10:08:40:
Het voordeel van static methods is dat je niet per se een instance van de class moet aanmaken.
Maar onderwater gebeurt dit natuurlijk wel (in jouw voorbeeldje).
Is dit dan niet logischer:
Volgens mij gebruik je statische classes met name indien je niet meerdere objecten van iets wil aanmaken.
Gewijzigd op 27/02/2012 10:24:28 door Ozzie PHP
Quote:
Maar onderwater gebeurt dit natuurlijk wel (in jouw voorbeeldje).
Het gebeurd pas in de method zelf. Voor het aanroepen van wat voor static iets dan ook moet nooit een instance gemaakt worden.
En wat logischer is weet ik niet. Ik vind zelf dat van mij, omdat een user in de constructor geen id moet meekrijgen, maar een naam en al die andere nodige data. De UserMapper zal in dit geval moeten zorgen dat er een User moet worden aangemaakt. Ik had mijn voorbeeld een beetje te simpel gemaakt, want eigenlijk zou dat een UserMapper klasse moeten zijn die een User aanmaakt. Zoiets heet het factory pattern.