Wist je dat je een class meerdere keren kan constructen?

Ik vond het wel grappig. Je zou verwachten dat dat niet kan.

<?php

class Foo {

public function __construct() {
echo 'hoi';
}

}

$foo = new Foo();
$foo->__construct();
$foo->__construct();


// hoihoihoi

?>
Ward, nogmaals... het gaat me niet om de technische invulling/implementatie, maar om de real-life gedachte erachter. Namelijk dat het vreemd is dat je iets kunt bouwen wat al gebouwd is. Daar verwonder ik me over.
De vliegtuigbouwer bouwt het vliegtuig: het vliegtuig kan zichzelf niet bouwen.

De naamgeving is niet ideaal, daar heb je wel een punt. Maar magische methoden zijn sowieso een vreemde eend in de bijt, want ze doen in x iets wanneer in y, buiten x, iets plaatsvindt. En dat doen ze nog automatisch ook, iets dat evenmin vanzelfsprekend is wanneer je programmeert.
Misschien wat offtopic:

In andere talen als C++ en Java kun je ook meerdere constructors declareren:

public class Book
{

    private String title;
    private String isbn;

    public Book()
    {
      //nothing specified!
    }

    public Book(String title)
    {
      //only title!
    }

    ...     

}

In PHP kan dit jammer genoeg niet.
Oh oké... grappig :)
Maar in principe is het gewoon hetzelfde als:
<?php
$foo = 'foo';
$foo = 'bar';
?>

Wil je dat php hier ook een warning op gooit ?????
Dat vind ik niet hetzelfde. Als je een huis hebt gebouwd, dan kun je van dat huis een deur (property) vervangen. Alleen je kunt niet opnieuw iets bouwen terwijl datgene al gebouwd is.
Heel Rome is gebouwd op de oude stad. En nogmaals, je moet niet alles van de programmeerwereld vergelijken met de echte wereld...

Als we trouwens toch over andere talen spreken, JavaScript doet dit het mooiste met zijn prototyped stijl. Hierbij zit de constructor niet in het object, maar maakt de constructor het objecten. In alle andere talen wordt de constructor eigenlijk pas aangeroepen wanneer er een object is.
>> Heel Rome is gebouwd op de oude stad.

Euh.. hè... wat heeft dat er mee te maken :D

Het gaat mij enkel om het feit dat je een constructor meerdere keren kunt aanroepen. Dat vind ik wat vreemd. Een deur die open staat, kun je niet nog een keer open zetten. Zelfde idee zeg maar. Anyhow... ik vond het leuk om met jullie te delen :)
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?
Ja, dat zie je goed: magische methoden zijn "event driven".

Reageren