// der php hacker

// archiv

Von hinkenden Vergleichen und Erfahrenen PHP-Programmierern

Geschrieben am 22. Dez 2008 von Cem Derin

Hello english speaking visitor. Maybe you want to take a look at the bottom of this article. I wrote an english version for you, in case of discussion ambitions. Thanks. – Cem

Mist. Mein Blog zählt nichtmal 10 Artikel, und ich muss schon mit dem Stänkern anfangen . Mir fiel heute ein Artikel von Luke Welling in die Hände, der so unglaublich schlecht ist, dass man ihn schon wieder verlinken muss. Konkret geht es darum, dass sich Luke darüber aufregt, dass PHP-Code immer häufiger wie Java ausschaut – nur halt mit mehr Dollar-Zeichen. Es ist schon irgendwie gemein, jetzt auf Deutsch zu stänkern, was Luke sicherlich nicht verstehen wird (der Tenor wird aber ganz bestimmt durchschimmern ;) -) Daher am Ende des Artikels der Versuch einer englischen Version (mein Englisch ist grauenhaft), falls Luke die Konforntation bzw. Diskussion nicht scheut.

Luke behauptet frei heraus:

Singletons are the object-oriented implementation of global variables.

Das ist schlichtweg falsch. Ich zitiere hier GoF:

How do we ensure that a class has only one instance and that the instance is easily accessible? A global variable makes an object accessible, but it doesn’t keep you from instantiating multiple objects.

Wir sehen also, ein Singleton wird zwei Anforderungen gerecht: Es ist global zugänglich und es kann nur ein einziges mal instanziert werden. Eine globale Variable ist zwar global verfügbar, kann aber mehrfach instanziert werden – was unter Umständen zu erheblichen Problemen führen kann die unter noch schlimmeren Umständen erst viel zu spät ans Tageslicht treten.

Dass das Singleton Pattern an sich Gegenstand hitziger Diskussionen ist, will ich gar nicht bestreiten. Ich persönlich bin auch eher ein Vertreter der Meinung, dass das Singleton Pattern viel zu exzessiv eingesetzt wird und die Instanzierung hier ausschließlich über Factorys erfolgen sollte – wenn sich nicht alles schon über eine einfache statische Klasse lösen lässt. Aber was Luke vorschlägt/bemängelt ist einfach nur Blödsinn. Sorry Luke.

English version – About flawed comparisons and expirienced coders

Bad, my newly started blog does not count 10 articles and I need to start to grump. I got hold of an article of Luke Welling today, which is so unbelievable stupid, that I need to repost it. In fact Luke criticizes that PHP code looks more and more like Java code – with some additional dollar signs. And as it is really nasty to blame Luke for that article in german (what he surely does not understand) I try to rewrite my thoughts in english at the bottom (my english is horrible) in case of Luke want to take a stand about this topic.

Luke asserts:

Singletons are the object-oriented implementation of global variables.

But thats completely wrong. I quote GoF:

How do we ensure that a class has only one instance and that the instance is easily accessible? A global variable makes an object accessible, but it doesn’t keep you from instantiating multiple objects.

As we can see, a singleton fits to two requirements: It’s global accesible and it’s unique. A global variable is accesible from everywhere, but such an object can have multiple instances – which can lead to issues. In a worst case scenario far too late viewable to change it easily.

That the singleton pattern is everything else as a golden hammer I dont want to deny. I personally prefer factory classes before the excessive use of singletons – if you cannot handle the problem by using a static class. But Lukes thoughts are simply crap. Sorry Luke. And Sorry for my english :-)


#001
23. Dez 2008

Naja ich meine Singletons sind ja auch nicht die besten Entwurfsmuster, wenn es um die Testbarkeit geht. Ein Mock-Up (bzw. ein Workaround für dieses) für eine Singleton zu schreiben kann ganz schön aufwendig zu werden.

// kommentieren

// senden
theme von mir, software von wordpress, grid von 960 grid system. funktioniert in allen browsern, aber der safari bekommt das mit der schrift am schönsten hin.