[OOP] "fake" functie
Ik kom soms met een class in de situatie dat ik een soort "fake" functie maak, een functie die eigenlijk alleen maar bedoeld is om uit te leggen wat er in de code gebeurt. Een voorbeeldje (versimpeld):
Code (php)
Als ik nu de autoloader registreer dan doe ik zoiets als dit:
Echter, ik zou de Autoloader class ook als volgt kunnen aanpassen:
Code (php)
Als ik nu de autoloader wil registreren dan krijg je dit:
of nog korter...
Nu vraag ik me af wat "beter" is. De allereerste manier van registeren, dus zo:
of de laatste manier...
Bij de eerste manier zie je duidelijker wat er gebeurt, maar de laatste manier is sneller omdat je geen extra functie hoeft aan te roepen.
Nu is dit een voorbeeld van een autoloader, maar het kan natuurlijk ook voor andere classes gelden. Stel we hebben een class "OrderVerwerker" die een order moet verwerken, doe je dan dit (de duidelijke manier):
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$id = 20;
$order_verwerker = new OrderVerwerker($id);
$order_verwerker->verwerk();
?>
$id = 20;
$order_verwerker = new OrderVerwerker($id);
$order_verwerker->verwerk();
?>
of doe je het zo...
Het is heel simpel; wil je je class nog later gebruiken, declareer je een variable; zoniet, kan je hem ook gewoon instantiëren.
Dus in het voorbeeld van de autoloader zou jij dus dit doen:
Maar nu zie je dus niet wat er gebeurt. Je ziet in de code alleen maar "new Autoloader();" staan, maar wat het doet, of wat het nut is wordt niet echt duidelijk... snap je wat ik bedoel?
Overigens zal ik in het geval van een Autoloader dit doen:
Oké, maar stel nu... we nemen weer het voorbeeld van die OrderVerwerker class. Het enige wat die class doet en kan is een order verwerken. Is het dan "fout" om dat vanuit de constructor te regelen?
Ik snap ook wel wat jij bedoelt, maar ik vraag me af of het handig is om dit soort "fake" functies handmatig te triggeren, terwijl je dat ook vanuit de constructor kan doen. Het scheelt je een funtie-aanroep en is sneller.
Quote:
Waarom zou je er een statische class van maken? Ik dacht juist dat jij niet van de statische classes was?
Omdat de autoloader geen klasse is maar een functie.
Quote:
Is het dan "fout" om dat vanuit de constructor te regelen?
Wat is fout? Ik vind het fout, maar misschien een ander iemand niet. Je moet ook hier weer kijken wat jij OO vindt, vind jij dit oké en dan is het oké in jouw code, vind je het verkeerd dan is het verkeerd in jouw code.
Quote:
Het scheelt je een funtie-aanroep en is sneller.
Nogmaals, als dat jouw doel is in OO. Een snelle code ipv een erg strict OO code (waarbij over strict weer gediscussieerd kan worden), dan moet jij dat doen.
Ik kan er trouwens geen statische class van maken, want ik geef paden mee in de constructor.