Elegante Parameterübergabe mit Feldern

Parameterübergabe mit FeldernBei Funktionen mit vielen optionalen Parametern hat man oft das Problem, dass die Parameter, die man übergeben möchte, nicht direkt an erster Stelle stehen. Der Funktionsaufruf sieht dann meist ziemlich unübersichtlich aus, da man erst einigen Parametern den Wert NULL übergeben muss. Auch bei Funktionen mit sehr vielen Parametern verliert man beim Funktionsaufruf recht schnell den Überblick.

Es ist möglich solche Funktionen um einiges übersichtlicher und komfortabler zu machen indem man die Parameter als Feld übergibt.

Parameter als Feld übergeben

Dazu übergibt man der Funktion als einzigen Parameter ein assoziatives Feld welches die eigentlichen Funktionsparameter als Elemente enthält. Ein Beispiel:

function bild_verkleinern($parameter = null) {
    $vorgaben  = array('breite' => 100,
                       'hoehe' => 100,
                       'seitenverhaeltnis_beibehalten' => true,
                       'kantenglaettung' => true);
    if (is_array($parameter))
        $parameter = array_merge($vorgaben, $parameter);
 
    echo "Breite: " . $parameter['breite'];
}
 
// Aufruf der Funktion
bild_verkleinern(array('breite' => 500, 'hoehe' => 250));

Vorgegebene Werte speichert man einfach in einem separaten Feld welches man dann mittels array_merge mit dem Parameter-Feld zusammenfügt. Die vorgegebenen Parameter werden dabei von den übergebenen Parametern überschrieben, bei Parametern die nicht übergeben wurden wird der vorgegebene Wert verwendet. Der Zugriff auf die Parameter erfolgt wie bei einem ganz normalen Feld per $parameter['name']. Mit Feldern lassen sich übrigens auch ganz einfach Funktionen mit beliebig vielen Parametern erstellen.

Parameter als Query-String übergeben

Gerade für Funktionen mit sehr vielen Parametern ist die Parameterübergabe als Query-String, wie bei manchen Template-Tags von Wordpress, meiner Meinung nach gut geeignet. Als Query-String wird der Teil einer URL bezeichnet der nach dem Fragezeichen kommt und die Parameter und Werte enthält die mittels der GET-Methode übertragen werden. Das sieht dann zum Beispiel so aus:

$klein = bild_verkleinern('breite=500&hoehe=250');

Die übergebene Zeichenkette wird mittels der Funktion parse_str analysiert und die Parameter und Werte werden in einem Feld gespeichert. Ist magic_quotes_gpc aktiv werden dabei alle ', ", \ und NUL-Zeichen mit einem Backslash geschützt, da man das normalerweise nicht will muss man das mit stripslashes rückgängig machen. Anschließend wird das Feld wie oben wieder mit dem Vorgaben-Feld zusammengeführt und anschließend kann es auch genau so benutzt werden.

// stripslashes_deep arbeitet sich durch das Feld und
// wendet auf jedes Element die Funktion stripslashes an.
function stripslashes_deep($wert) {
    $wert = is_array($wert) ?
            array_map('stripslashes_deep', $wert) :
            stripslashes($wert);
    return $wert;
}
 
function parameter_parsen($parameter, $vorgaben = '') {
    if (is_array($vorgaben))
        $ergebnis = $vorgaben;
    else
        $ergebnis = array();
 
    if (is_array($parameter))
        $ergebnis = array_merge($ergebnis, $parameter);
    else {
        parse_str($parameter, $geparst);
 
        if (get_magic_quotes_gpc())
            $geparst = stripslashes_deep($geparst);
 
        $ergebnis = array_merge($ergebnis, $geparst);
    }
 
    return $ergebnis;
}
 
// Beispielfunktion:
function bild_verkleinern($parameter = '') {
    $vorgaben  = array('breite' => 100,
                       'hoehe' => 100,
                       'seitenverhaeltnis_beibehalten' => true,
                       'kantenglaettung' => true);
    $p = parameter_parsen($parameter, $vorgaben);
 
    echo "Breite: " . $p['breite'];
}

Diese Methode ist allerdings nicht für alle Arten von Funktionen bzw. Parametern geeignet. Ein Problem ist zum Beispiel das bestimmte Zeichen nicht mehr übergeben werden können (z.B. &). Auch die Übergabe von Feldern gestaltet sich eher schwierig (grundsätzlich ist es aber möglich: funktion("feld[]=hallo&feld[]=welt");)

Informationen

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (Keine Bewertung bis jetzt)
Loading ... Loading ...
Kategorie: PHP, Programmierung
Ansichten: 702

Kommentare

Keine Kommentare bis jetzt.

Kommentar schreiben

XHTML: Folgende Elemente sind erlaubt: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

Angetrieben durch Wordpress Thema erstellt von Antu