Event-Handler in PHP5

Hinweis vorab: Nein, in PHP gibt es kein „klick“ oder „mouseover“.
Sowas gehört zu JavaScript und somit zum Client (Browser).
Folgender Beitrag erklärt die Verwendung von eigenen Events die nur auf dem Server ausgeführt werden. Wer sich also erhofft hat auf dem Server irgendwie auf einen „klick“ zu reagieren ist hier falsch.

Jeder gute PHP-Programmierer kennt das Problem:

„Wie kann ich meine Applikationen dynamisch erweitern ohne am Quelltext des eigentlichen Programmes etwas zu ändern?“

Klar könnte man zu jedem Plugin eine Anleitung erstellen in der erklärt wird wo man welchen Code einfügen muss, doch nicht jeder kann PHP und für Kunden, welche sich dann für ein solches Plugin extra einen Programmierer besorgen müssten, macht das ganze keinen Sinn.

Wieso sollten Sie für deine Applikation bezahlen wenn sie im Nachhinein wieder jemanden brauchen der ihnen das ganze einrichtet?

Um dieses Problem zu vermeiden erstellt man sog. EventListener (Klassen/Funktionen die auf ein bestimtes Ereigniss warten). Doch ein EventListener alleine reicht nicht. Man braucht, um alle erstellten Listener auch richtig zuordnen zu können, einen EventHandler (Eine Klasse/Funktion die alle Listener für ein bestimmtes Event ausführt).

Als erstes erstellen wir mal eine Klasse die nichts weiter macht als einen bestimmten Text auszugeben.

Führt man diese Klasse aus erhält man „Hallo Welt“.

Jetzt wollen wir aber nicht mehr den Text „Hallo Welt“ sondern „Hallo Erde“ als Ausgabe.
Dazu müssten wir den Quelltext wie folgt ändern:

zeile:2
ersetzen mit: protected $message = ‚Hallo Erde‘;

Wer noch mit dem alten WBB2 gearbeitet hat, kennt solche Anweisungen mit Sicherheit, doch für Leihen ist das schon ein Grund sich nach etwas anderem umzusehen. Vor allem dann wenn ein Plugin mehr als eine Änderung benötigt…

Kommen wir deswegen zum eigentlichen Thema: EventHandler und EventListener

Ein EventListener ist, wie oben schon erwähnt, eine Programm das auf einen Event wartet (listener => Hörer, Zuhörer). Folglich brauchen wir eine Klasse die solche Events auslöst: Der EventHandler (handler => Handhaber, Anwender)

Ein EventHandler braucht in seiner eigentlichen Funktion nur zwei Methoden:

  • Überwachen (Bestimmte Events mit EventListener belegen)
  • Auslösen (Bestimmte Events mit registrierten EventListener abfeuern)

Das Überwachen wird im Folgenden Quelltext mit der Methode „observe“ und das Auslösen mit der Methode „fire“ übernommen.

Jetzt fehlt uns noch ein Template für unsere EventListener, damit alle die selbe Handhabung besitzen.
Templates werden in PHP durch das Stichwort interface erstellt

Wie oben erwähnt wollen wir den Text „Hallo Welt“ mit „Hallo Erde“ ersetzen, folglich muss unser EventListener irgendwie Zugriff auf diese Variable haben. Deswegen schauen wir uns nochmal die Klasse „HalloWelt“ an, denn dort müssen wir eine neue Methode definieren die uns das Ganze ermöglicht:

Nun erstellen wir einen passenden EventListener der unsere Ausgabe dynamisch macht.

Alles was wir brauchen haben wir, jetzt fehlt uns noch ein passender Eventname den wir überwachen können. Ich hab mich für den Event „editMessage“ entschieden ;)

Wenn man alles richtig gemacht hat sollte nun „Hallo Erde“ ausgegeben werden.

Manche denken sich jetzt vielleicht was der Riesen Aufwand für die kleine Änderung denn soll, und die Frage ist durchaus berechtigt. Denn für eine so minimale Änderung wie wir sie gerade durchgeführt haben braucht man mit Sicherheit keine EventHandler/Listener, aber für Komplexere Projekte, welche man mit Plugins erweitern möchte ist es durchaus sinnvoll.

Wer aufgepasst und die Klasse „EventHandler“ genau angesehen hat wird feststellen, dass man einen Event mit beliebig vielen EventListener belegen kann. Wir könnten nun einfach den Event „editMessage“ mit einem weiteren EventListener belegen der uns den Text in „Hallo Universum“ ändert.

Das einbinden der ganzen EventListener kann man ganz einfach mit der Magischen Funktion __autoload erledigen, oder man macht es wie ich und speichert alle EventListener in einer Datenbank ab und überwacht bestimmte Ereignisse schon im voraus.

So das wars und ich wünsche auch viel Spaß beim ausprobieren!
Murdoc

Veröffentlicht von

Murdoc

Armer php-coder.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *