OOP constructor wanneer wel en wanneer niet?
De constructor is een mooie magic method in OOP. Het helpt je om simpele dingen te doen en de classe voor te bereiden op het gebruik.
Alleen nu vraag ik me af. Wat is nou mooier OOP:
Versie 1
De constructor om de naam, wachtwoord, enz. al vast te stellen
Versie 2
Of is dit mooier? En gebruik je een constructor alleen om bepaalde variabelen toe te voegen, connectie te maken met de db, enz.?
Alleen nu vraag ik me af. Wat is nou mooier OOP:
Versie 1
De constructor om de naam, wachtwoord, enz. al vast te stellen
Code (php)
Versie 2
Of is dit mooier? En gebruik je een constructor alleen om bepaalde variabelen toe te voegen, connectie te maken met de db, enz.?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Gewijzigd op 20/12/2011 17:53:26 door Wouter J
Gesponsorde koppelingen:
Hoi Wouter,
In de constructor zet ik altijd datgene waarvan het object afhankelijk van is (bijvoorbeeld een database) en een setter gebruik ik voor de rest.
Niels
In de constructor zet ik altijd datgene waarvan het object afhankelijk van is (bijvoorbeeld een database) en een setter gebruik ik voor de rest.
Niels
Ik zou voor het eerste gaan. De constructor doet zoals je zelf al zegt, de voorbereiding van het object.
Die set() methods zijn meer om later nog dingen bij te werken, zoals je wachtwoord in jouw voorbeeld.
Die set() methods zijn meer om later nog dingen bij te werken, zoals je wachtwoord in jouw voorbeeld.
Ik zou het af laten hangen van wat het object kan. Als het object ook bruikbaar is zonder de user en password, dan zou ik het niet opgeven in de constructor. Als echter alle functies (of beter functionaliteiten) van het object afhankelijk zijn van deze gegevens dan is het via de constructor meegeven wel al een dwang om ervoor te zorgen dat het gezet is.
Een beetje zoals Niels dus ook zegt.
Een beetje zoals Niels dus ook zegt.
Naar mijn idee is een constructor bedoeld om bepaalde attributen en eigenschappen en vars te laden die noodzakelijk zijn voor de class zelf..
Ik kan er ook naast zitten hoor maar mocht dit zo zijn dan hoor ik dat graag want je bent nooit uitgeleerd :P
Ik kan er ook naast zitten hoor maar mocht dit zo zijn dan hoor ik dat graag want je bent nooit uitgeleerd :P
Ok, bedankt voor de antwoorden. Het ligt er dus aan wat het nut van de class is.
In dit voorbeeld, een user heeft altijd een username en een password. Je kunt niet een user hebben zonder een naam. Dus je zal user wel meenemen in de constructor en de password niet? Aangezien het password alleen nodig is bij het inloggen en je daar een aparte class voor nodig is?
In dit voorbeeld, een user heeft altijd een username en een password. Je kunt niet een user hebben zonder een naam. Dus je zal user wel meenemen in de constructor en de password niet? Aangezien het password alleen nodig is bij het inloggen en je daar een aparte class voor nodig is?
Jep.
In C++ en andere object-georiƫnteerde talen waar memory management wel belangrijk is heb je RAII als vuistregel. RAII houdt ongeveer in dat wanneer je een object aanmaakt, je het ook direct kan gebruiken. En daarvoor moet je dus bij het aanmaken alle afhankelijkheden meegeven.. via de constructor. Als je dat consequent afdwingt heb je nooit een object dat wel bestaat, maar nog niet gebruikt kan worden. En dat scheelt ook weer een boel checks in het object zelf schrijven (kan dit object gebruikt worden? zijn alle bronnen aanwezig?)
(edit: het slaat niet helemaal op PHP, maar het idee dat wanneer je een object hebt, je het ook daadwerkelijk al direct kan gebruiken is voor mij wel het grote voordeel van constructors goed gebruiken in PHP.)
In C++ en andere object-georiƫnteerde talen waar memory management wel belangrijk is heb je RAII als vuistregel. RAII houdt ongeveer in dat wanneer je een object aanmaakt, je het ook direct kan gebruiken. En daarvoor moet je dus bij het aanmaken alle afhankelijkheden meegeven.. via de constructor. Als je dat consequent afdwingt heb je nooit een object dat wel bestaat, maar nog niet gebruikt kan worden. En dat scheelt ook weer een boel checks in het object zelf schrijven (kan dit object gebruikt worden? zijn alle bronnen aanwezig?)
(edit: het slaat niet helemaal op PHP, maar het idee dat wanneer je een object hebt, je het ook daadwerkelijk al direct kan gebruiken is voor mij wel het grote voordeel van constructors goed gebruiken in PHP.)
Gewijzigd op 21/12/2011 09:45:31 door Jelmer rrrr
Een (halve) uitzondering: proxy objecten



