PHP Blogger

Startseite Schreib mir ne Mail! RSS Abo Webnews

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:

Alles in allem ist das ganze sehr einfach (Auch hier könnte man Bücher über Bücher schreiben, ich beschränke mich mal auf die Basics): Der Observer ist ein Objekt, bei dem sich andere “anmelden”. Das kann pauschal sein, das heisst das Observerobjekt ist auf eine Aktion spezialisiert. Anders ist es, wenn ein Observerobjekt mehrere Aktionen verarbeiten kann, dann erfolgt die Anmeldung nicht pauschal, sondern ist auf eine Aktion spezialisiert. Schauen wir uns beide Fällt mal als Pseudocode an:

Eine pauschale Registrierung:

$actionObserver->register($object);

Eine auf eine Aktion spezialisierte Registrierung:

$observer->registerFor("action", $object);

Egal, ob es eine pauschale oder eine spezialisierte Observervariante ist, der weitere Ablauf ist der selbe: Wird durch einen Event die gewünschte Aktion ausgelöst, werden alle registrierten Objekte benachrichtigt. Meist wird den Objektfunktionen, die aufgerufen werden, noch Parameter mitgegeben, an Hand derer der Statuswechsel (bzw. der Aktionsauslöser) innerhalb der aufgerufenen Funktionen nachvollzogen und entsprechend weiterverarbeitet werden kann.

Eine abstrakte Funktion innerhalb des Observer-Objektes könnte so aussehen:

function _CallRegisteredObjects($action)
{
    foreach($this->registeredObjects[$action] as $obj)
        $obj->releaseAction($action, $this->attributes);
}

Alle registrierten Objekte werden benachrichtigt, falls eine Statusänderung auftritt. Interessant wird es im nächsten Teil, dann schauen wir uns mal eine konkrete Implementierung an, wie sie auch in ähnlicher Art und Weise von Wordpress und großen Frameworks eingesetzt wird.

See you.

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

Peter meint dazu:

28. Januar 2008 um 12:30

Der nächste Teil fehlt leider :( noch Lust einen zu schreiben?

timi meint dazu:

30. Januar 2008 um 15:22

Jupp kommt noch :)

Narf meint dazu:

31. März 2008 um 18:49

Danke für diese sehr grundlegenden Erklärungen. Würde mich auch über eine Fortsetzung freuen…

timi meint dazu:

15. April 2008 um 08:11

Hey Narf, ich arbeite bereits an dem neuen Artikel, wird demnächst erscheinen…

RSS für Kommentare zu diesem Artikel · TrackBack URI

Schreib Deine Meinung