Querdenkender Webworker mit WordPress-Affinität

Dynamisch Methoden aufrufen

Erst kürzlich habe ich im PHP-Forum einen Post mit dem Titel „pattern abstract factory“ entdeckt. Das interessierte mich. Welche Probleme oder Unklarheiten könnte der Schreiber wohl mit dem Pattern haben? An sich wird das Pattern ganz einfach angewendet. Man definiert eine abstrakte Klasse mit prototypartigen Methoden. Alle Unterklassen müssen nun die entsprechenden Methoden implementieren, sonst steigt der Interpreter mit einer Fehlermeldung aus. Da in PHP4 der Gebrauch von abstract noch nicht möglich ist, ist das Pattern (so gut wie) nicht umsetzbar und findet erst mit PHP5 einen Verwendungszweck.

Nachdem ich das Problem erkannt hatte, war mir klar, dass dies nur wenig mit dem „Abstract Factory“-Pattern zu tun hatte. Allerdings könnte man die Klassen natürlich in entsprechender Weise gestalten. Im Wesentlich ging es aber darum, auf bestimmte $_POST-Werte zu reagieren, die durch ein Formular gesendet wurden. Dabei wurde vorher explizit (oder eben implizit durch das „Factory Method„-Pattern) ein passendes Objekt erzeugt, dessen Methoden durch ein switch-Konstrukt aufgerufen wurden. Dabei gab es keineswegs Probleme, sondern es bestand nur der Wunsch den Code etwas eleganter und wartbarer zu gestalten.

Um nicht bei jeder Erweiterung der Klassen auch noch an den switch-Konstrukten nachbessern zu müssen, bietet es sich an, etwas zu schreiben, was automatisch auf diese Veränderungen reagiert. <ironie>Dafür muss man sich vielleicht noch einmal ins Gedächtnis rufen, dass PHP nicht nur automagisch, sondern auch dynamisch arbeitet.</ironie> So können eben nicht nur Variablen, sondern auch Funktions- und Methodenaufrufe sehr felxibel sein. Die Lösung dieses Problems kann man sich in etwa so vorstellen:

[code lang=“php“]
class Test {

function boom () {
echo „Boom!!!“;
}

}

$test = new Test;
$method = „boom“;
if (method_exists ($test, $method)) {
$test->$method ();
}
[/code]

Auch wenn die Syntax – ehrlich gesagt – mehr als seltsam wirkt, so wird PHP dies zulassen, wenn auch die 1:1-Übernahme so nicht unbedingt zu empfehlen ist.

Have fun!

Das könnte Dich auch interessieren:

Kommentare

  1. Hi,

    man kann auch mit der funktion call_user_func_array eine Methode dynamisch aufrufen:
    call_user_func_array(array($objekt, $methode), $argumente);

    Vorteilhaft ist diese Funktion, weil man die Argunmente genau wie in einer __call Funktion als Array bekommt und somit direkt durchschleusen könnte.

    Gruß

    Ruben

Deine Meinung ist uns wichtig

*