Ja, inderdaad... dat blijkt... maar ergens zou je verwachten dat er een error of warning volgt. Het is toch raar. Je kunt een class maar 1x constructen en niet 2x.
Ik snap dat het een method is. Ik vind het persoonlijk alleen vreemd dat je die method meerdere keren kan aanroepen, zonder dat daar een warning op volgt.
Als je een gebouw vergelijkt met een class, dan kun je zo'n gebouw maar 1x opbouwen. Je kunt een opgebouwd gebouw niet nog een keer opbouwen. Het is immers al opgebouwd.
Andere methoden kun je ook meerdere keren aanroepen — en je moet zelf iets toevoegen als je dat zou willen voorkomen. Het is dus wel standaardgedrag van PHP.
Lol... ik snap wat een constructor doet en hoe het werkt. Alleen gaat het daar niet om. Het gaat om de achterliggende gedachte. Namelijk dat het raar is dat je iets kunt "opbouwen" wat al is opgebouwd.
Maar de constructor bouwt zelf niets op; de constructor is een magische methode die (automagisch) wordt aangeroepen bij het opbouwen. Dat is nogal een verschil.
De magische methode __toString() maakt ook geen string van een object, maar wordt aangeroepen wanneer er een string van het object wordt gemaakt.
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.
Ozzie, probeer dan eens je vliegtuigje af te breken door __destruct() aan te roepen...
Je moet die namen niet te letterlijk nemen. __toString() betekent ook letterlijk "naar string", maar een string van een object maken kun je daarmee niet.