Iets wat reeds gebouwd is, kun je niet nogmaals bouwen... het is immers al gebouwd.
Het doel van de constructor is het opbouwen/initialiseren van het object.
Even een leuk voorbeeld voor jou dan. Stel we maken een vliegtuigje in lego.
Dit vliegtuigje kan ik niet nogmaals bouwen, want het is al gebouwd. Het enige wat ik kan doen is een nieuw vliegtuigje bouwen (nieuwe class) of dit vliegtuigje afbreken (destruct) en vervolgens opnieuw opbouwen. Maar iets wat al gebouwd is nogmaals bouwen... dat kan niet.
Of je koopt een nieuwe doos lego, en bouwt een 2e.
>> Hadden ze __construct() dan niet beter ___onConstruct() kunnen noemen, want wat er in de methode staat geeft toch aan wat er op het moment van aanmaken moet worden uitgevoerd? Of zie ik dit verkeerd?
Klopt inderdaad. En daarom is het dus ook raar dat je __construct meer dan 1x kunt aanroepen.
>> Of je koopt een nieuwe doos lego, en bouwt een 2e.
Wat ik dus ook al zei "Het enige wat ik kan doen is een nieuw vliegtuigje bouwen (nieuwe class)...".
public function __construct($name)
{ $this->name = $name; }
}
$jaap1 = new User('Jaap');
$jaap2 = new User('Jaap');
$jaap1 === $jaap2; // false
var_dump($jaap1); // object(User)#1 (1) { ... }
var_dump($jaap2); // object(User)#2 (1) { ... }
?>
Ze zijn niet hetzelfde. Ze zijn beide een andere instance.
[hr]
Ik heb hier trouwens nog even over nagedacht en eigenlijk is het inderdaad heel krom dat de constructor in PHP gewoon een functie is. In JavaScript heb je gewoon een functie die het object terugstuurt, maar die zelf geen onderdeel is van het object. In ruby heb je een functie die private is die als constructor dient. Ik weet niet hoe Java dit afwerkt, maar krom is het wel. Maar goed, dat zijn we gewent :)