PHP Blogger

Startseite Schreib mir ne Mail! RSS Abo Webnews

Archiv für OOP

Vererben oder dekorieren?

Mich lässt der Artikel von Stefan nicht in Ruhe. Ihm ging es eigentlich um den Einsatz der Mehrfachvererbung und wie sinnvoll sie ist. Die Beispiele, die er von Corsin übernommen hat, sind recht wackelig und mein Vorschlag war, sie besser mit dem Dekoratormuster zu “erschlagen” als durch die Gegend zu vererben.

Ich möchte keinen langweilen, jeder hat sich damit bestimmt schon ausreichend beschäftigt, aber beide Methoden haben Ihre Vorteile und ich möchte jede Technik kurz anreissen, denn ich denke es ist sinnvoll, wenn man sich beider Techniken bewusst ist.

Den kompletten Artikel lesen »

Teile und genieße Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • MisterWong
  • del.icio.us
  • Technorati
  • Digg
  • Slashdot
  • YahooMyWeb
  • Furl
  • Ma.gnolia
  • Spurl
  • Netscape
  • StumbleUpon
  • MyShare
  • blogmarks

Ein generisches Singleton

Ein sehr beliebter (und oft über Google gefundener) Artikel bisher ist “Das Singleton Design Pattern mit PHP 4“. Das Grundprinzip des Artikels ist mit einem Satz erklärt: Eine beliebige Klasse bekommt die Funktion “getInstance” implementiert, die eine Referenz auf ein Objekt dieser Klasse zurückliefert.

Auf diese Art und Weise wird der Speicher geschont, weil zur Laufzeit immer nur eine einzige Objektinstanz verwendet wird. So kann man z.B. quer durch eine Applikation super einfach auf ein- und dieselbe Datenbankverbindung zugreifen.

Den kompletten Artikel lesen »

Teile und genieße Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • MisterWong
  • del.icio.us
  • Technorati
  • Digg
  • Slashdot
  • YahooMyWeb
  • Furl
  • Ma.gnolia
  • Spurl
  • Netscape
  • StumbleUpon
  • MyShare
  • blogmarks

Brich die Regeln - jetzt erst richtig!

Nach dem andere Blogs den Ball zum Thema “Regeln brechen” aufgenommen haben, hab ich mir ebenfalls nochmal Gedanken dazu gemacht.

René z.B. ist der Ansicht, das Programmierung im OOP Sinne wesentlich sauberer ist als prozedurale Programmierung. “Alles Geschmackssache” sagte der Affe und biss in die Seife ;) Ich denke, das Performance kein Freibrief für schlampige Programmierung sein sollte. Die kommt leider zu oft vor - ich kenne es von mir. Es gibt nur wenige Arbeitgeber, die genügend Entwicklungszeit einräumen und kein Verständnis entgegenbringen, wenn es um angemessene Projektzeiten geht.

Ich bin generell der Ansicht, dass man prozedurale Programmierung nicht mit Objektorientierter Entwicklung vergleichen kann. Das sind einfach zwei unterschiedliche Disziplinen. Die eine etwas einfacher und älter als die andere, aber beide haben Vorteile.

Wird ein Projekt nicht erst dann unübersichtlich und wirkt schlecht programmiert, wenn beide Arten zu programmieren mit einander vermischt werden?

Den kompletten Artikel lesen »

Teile und genieße Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • MisterWong
  • del.icio.us
  • Technorati
  • Digg
  • Slashdot
  • YahooMyWeb
  • Furl
  • Ma.gnolia
  • Spurl
  • Netscape
  • StumbleUpon
  • MyShare
  • blogmarks

Sei ein Objekt-Schwein!

Du stehst auf Objektorientierung? Du versuchst alles und jeden in ein Objekt zu verpacken und wild hin und her zu vererben? Dann gibst Du genau der oder die Richtige, wenn es darum geht, genau das nicht zu machen :)

Ich will, das Du mit mir die Regeln brichst. In den Sonnenuntergang reitest und auf alle Objekte und Klassen der Welt pfeifst… Es geht nämlich um Hilfsfunktionen und wie man sie am besten in Dateien und verpackt und included.

Überlegen wir erst mal, wie man Hilfsfunktionen ablegen könnte:

  • Globale Funktionen
  • Klassenmember Funktionen
  • Statische Klassenmember Funktionen

Den kompletten Artikel lesen »

Teile und genieße Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • MisterWong
  • del.icio.us
  • Technorati
  • Digg
  • Slashdot
  • YahooMyWeb
  • Furl
  • Ma.gnolia
  • Spurl
  • Netscape
  • StumbleUpon
  • MyShare
  • blogmarks

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 »

Teile und genieße Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • MisterWong
  • del.icio.us
  • Technorati
  • Digg
  • Slashdot
  • YahooMyWeb
  • Furl
  • Ma.gnolia
  • Spurl
  • Netscape
  • StumbleUpon
  • MyShare
  • blogmarks

PHP 5 Konstruktor unter PHP 4 einsetzen

Abwärtskompatible Bibliotheken und Applikationen sind in PHP in Zeiten des Umbruchs immer schwieriger herzustellen. Mit jeder PHP Version ändern sich Funktionen, Objektorientierung und vieles andere. Der stärkste Schnitt zwischen PHP 4 und 5 war und ist immer noch die “neue” Konstruktor-Notation:

function __construct()
{
}

Irgendwie hab ich immer noch nicht so ganz genau gepeilt, was den Ausschlag zu der von den PHP Entwicklern gewählten Notation geführt hat. Ich finde es auf jeden Fall furchtbar.

Den kompletten Artikel lesen »

Teile und genieße Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • MisterWong
  • del.icio.us
  • Technorati
  • Digg
  • Slashdot
  • YahooMyWeb
  • Furl
  • Ma.gnolia
  • Spurl
  • Netscape
  • StumbleUpon
  • MyShare
  • blogmarks

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 »

Teile und genieße Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • MisterWong
  • del.icio.us
  • Technorati
  • Digg
  • Slashdot
  • YahooMyWeb
  • Furl
  • Ma.gnolia
  • Spurl
  • Netscape
  • StumbleUpon
  • MyShare
  • blogmarks

PHP Objekt Generator

POG LogoDie Jungs von POG verfolgen eine interessante Idee: Der Code von Standard Objekten sieht jedes Mal ähnlich aus und ist daher reproduzierbar. Aus der Erfahrung heraus, benötigt man immer wieder die selben Funktionen und Angaben, um Daten aus PHP nach MySQL zu schaufeln und umgekehrt.

Das naheliegenste ist natürlich ein Generator, der sauberen Code generiert. Ich hab mir mal den “künstlich” erzeugten Code angeschaut und folgendes festgestellt:

  • Der Code ist sauber strukturiert
  • Die Daten werden validiert
  • Der Code kann für PHP 4 und PHP 5 (bzw. 5.1+) generiert werden
  • Der generierte Code ist als Zip downloadbar
  • Der generierte Code ist via Copy & Paste verwendbar (Im Textarea abgebildet)
  • Im Zip wird ein DB Wrapper für PHP 4 geliefert
  • Für PHP 5.1+ kann auch die native PDO (PHP Data Objects) Klasse verwendet werden
  • Im Zip wird eine kleine Setup Routine mitgeliefert
  • Im Zip ist auch schon der MySQL Code drin

Den kompletten Artikel lesen »

Teile und genieße Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • MisterWong
  • del.icio.us
  • Technorati
  • Digg
  • Slashdot
  • YahooMyWeb
  • Furl
  • Ma.gnolia
  • Spurl
  • Netscape
  • StumbleUpon
  • MyShare
  • blogmarks

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 »

Teile und genieße Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • MisterWong
  • del.icio.us
  • Technorati
  • Digg
  • Slashdot
  • YahooMyWeb
  • Furl
  • Ma.gnolia
  • Spurl
  • Netscape
  • StumbleUpon
  • MyShare
  • blogmarks

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 »

Teile und genieße Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • MisterWong
  • del.icio.us
  • Technorati
  • Digg
  • Slashdot
  • YahooMyWeb
  • Furl
  • Ma.gnolia
  • Spurl
  • Netscape
  • StumbleUpon
  • MyShare
  • blogmarks