PHP Blogger

Startseite Schreib mir ne Mail! RSS Abo Webnews

Archiv für Design Pattern

Code-Optimierung: Rückgabewerte, Fabriken, 0, NULL, false und 1

Oh wie kryptisch. Heute nur ein kurzer Beitrag rund ums Thema Rückgabewerte und Code-Optimierung was Lesbarkeit betrifft. Bin letzte Woche eher zufällig mit einem Kollegen über das Thema gestolpert und obwohl es so trivial ist, hat es mich nicht losgelassen. Und zwar geht es um die Wert-Range von false. Was wird eigentlich alles als false im weitesten Sinne interpretiert?

PHP nimmt es bei Wertvergleichen standardmäßig nicht so genau. Die Vergleichs-Operatoren gleich bzw. ungleich (== und !=, oh jetzt kratze ich wirklich an den Basics) sind zunächst ja nicht Typen beeindruckt. Weniger was Lederjacken-Träger angeht, als die Werte von Variablen.

Für ganz Genaue müssen da schon die Operatoren === (Identisch) und !== (Nicht identisch) herhalten. Mit welchen Operatoren man Variablen vergleichen sollte, ist wieder mal Geschmackssache. Ich halte das in der Regel wie folgt: Geht es um einen wichtigen Vergleich - eine Typ-Validierung in einer Setter-Methode beispielsweise - nutze ich die strengen Operatoren. Bei einer unkritischen Abfrage von Rückgabewerten (wie gesagt, sie muss unkritisch sein) bediene ich mich oft bei den Standard-Operatoren.

Den kompletten Artikel lesen »


Objektorientierung vs. Performance

So schnell können Wünsche in Erfüllung gehen Julius ;) Das mit dem Artikelwunsch ist eine prima Sache für Autoren. Ich gebe zu, in letzter Zeit bin ich wenig fantasievoll, was Artikelthemen angeht. Dann schreibt man halt über ein Thema, das einen selbst gerade beschäftigt und natürlich nutze ich meinen Blog auch dazu, Lösungswege für mich (und die Öffentlichkeit) festzuhalten.

Performance als Thema ist immer so eine Geschichte. Bei den meisten kleinen Projekten eher präventiv zu sehen, ist es bei Business-Projekten mit hohen Zugriffszahlen und/oder gigantischen Datenbankgrößen ein nicht unwesentlicher Aspekt bei der Webentwicklung.

Aber aus Spiel und Spass kann schnell ein großes Projekt werden, weil es das mehr oder minder breite Publikum begeistert und die Zugriffszahlen in die Höhe schießen lassen und die Entwicklung mit dem Tuning nicht mehr nachkommt. In diesem Fall (und allen anderen) rechnet sich dann eben eine sorgfältige leicht paranoide Planung der Entwicklung nach dem Motto, was wäre wenn…

Den kompletten Artikel lesen »


Hook- und Callback-Funktionen (Teil 3)

Vor ziemlich genau 100 Jahren hat der PHP Blogger mit einer Serie begonnen, die leider nie zum Ende gekommen ist: Es geht im Hook- und Callback Implementierungen. Teil 1 hat die eine Vererbungstechnik vorgestellt, in Teil 2 haben wir uns einen Callback-Stack angeschaut und weil mich ständig Fragen via Mail zu dem Thema erreichen, habe ich mich entschieden, den 3. Teil doch noch fertig zu stellen ;)

Im Teil 3 werfen wir also einen Blick auf die Listener-Objekte, wie sie in Actionscript zum Einsatz kommen. Die Actionscript-Götter haben mit den Listenern im Prinzip Callback-Pakete geschnürt: Alle zusammengehörigen Callback-Funktionen sind in einem Objekt untergebracht.

Den kompletten Artikel lesen »


Das Singleton Design Pattern mit PHP 4

Ein vielversprechendes Standardmuster ist das Singleton Design Pattern. Es sorgt dafür, das in einer Applikation oder einem Framework immer nur ein und dieselbe Objektinstanz verwendet wird - das aber, so oft man möchte. Eine klassische Verwendung wäre etwa eine Datenbankverbindung. Es wird immer nur eine gleichzeitig benötigt, aber an mehreren Stellen.

Ein Vorteil, der sich auf den 1. Blick ergibt, ist die Performance: Das Objekt muss nur einmal initialisiert werden - eventuelle Datenbankverbindungen werden nur einmal zu Beginn aufgebaut. Auch eine unter Umständen aufwändige Parametrisierung muss nur einmal durchgeführt werden. Und zu guterletzt wird der RAM nicht mit redundaten Infos zugemüllt - was will man mehr als eine schlanke, effiziente Anwendung!?

Um ein stinknormales Objekt zu einem Singleton-Objekt zu machen, ist nur eine einzige Funktion notwendig: “GetInstance”. Wie sie heisst, ist eigentlich egal - als Quasistandard hat sich aber “GetInstance” durchgesetzt. Beim 1. Aufruf erzeugt diese statische Funktion ein neues Objekt und liefert eine Referenz auf dieses zurück.

Den kompletten Artikel lesen »


Die Mutter aller Objekte

Okay, jetzt wird ein bisschen an der Oberfläche gekratzt. Ich möchte einen Quasi-Standard vorstellen, der viele Möglichkeiten eröffnet und trotzdem oft links liegen gelassen wird: Das Objekt-Objekt, oder die Mutter aller Objekte :)

Wer schon mal Windowsprogrammierung mit der MFC oder STL betrieben hat, kennt das Objekt-Objekt. Genauso gut sind diejenigen dran, die schon mit guten PHP Frameworks gearbeiten haben: Alle Klassen sind von einer Stammklasse abgeleitet, die absolut wertfrei ist.

Vielleicht sieht das der eine oder andere als Designfehler an, denn Klassen sollten ihre Eigenschaften und Methoden eigentlich nur an gleichartige oder artverwandte Klassen weitergeben. Wieso dann eine Mutterklasse für alles?

Den kompletten Artikel lesen »


Hook- und Callback-Funktionen (Teil 2)

Im ersten Teil dieser kleinen Serie hab ich einen Blick auf vererbte oder abstrakte Klassen geworfen - jetzt ist erst einmal der Callback-Stack dran. Ich denke, das ganze Thema in zwei Teilen abzufackeln, ist ein Ding der Unmöglichkeit. Dafür gibt es einfach zu viele Varianten. In den ersten beiden Teilen stelle ich mal die Basisvarianten vor, in Teil 3 und 4 gehe ich auf mögliche Erweiterungen ein.

Ich hatte bereits erwähnt, das ein Callback-Stack dem Observer-Muster sehr ähnelt. Wie funktioniert das Observer-Muster nun genau? Wer das gepeilt hat, schnallt auch schnell das Callback-Stack-Prinzip:

Den kompletten Artikel lesen »


Hook- und Callback-Funktionen (Teil 1)

Um eine Applikation schnell und einfach dynamisch um Funktionen zu erweitern kommen oft Hook- oder Callback-Funktionen zum Einsatz. Typo3 macht davon Gebrauch, die WordPress Entwickler lieben sie und auch bei Cake oder RubyOnRails kommen sie zum Einsatz.

Genau genommen sind Hook-Funktionen und Callback-Funktionen ein und das selbe. Sie werden aufgerufen, wenn eine bestimmte Aktion durchgeführt wird, wurde oder werden soll. Die zwei beliebtesten Typen von Hook-Funktionen sind folgende:

  • Vererbte oder Abstrakte Funktionen: Eine gängige OOP Technik, bei der eine Funktion abstrakt oder mit einem Default-Verhalten definiert wird, das von einer Kind-Klasse übernommen oder überschrieben wird.
  • Callback-Stack: Bei dieser Art registrieren sich Objekte bei einem Objekt, das den Callback-Funktionen-Stack verwaltet. Wird ein Ereignis ausgelöst, werden die zu dem Ereignis registrierten Objektfunktionen der Reihe nach aufgerufen.

Den kompletten Artikel lesen »