5 Stimmen

Wie könnte ich PHP-Code mit vielen isset-Prüfungen und sich wiederholenden, aber variablen Generierungsargumenten reduzieren?

Grüße. Ich kämpfe damit, ein Codesegment zu reduzieren, das ziemlich langatmig aussieht und mich nicht von seiner Wichtigkeit überzeugt. Es handelt sich um eine Funktion zur Generierung einer Vielzahl von Session-Arrays, die zum Ausfüllen von Formularen verwendet werden, und ich muss die Existenz bestimmter Werte im Argument-Array überprüfen, mit Fällen für jeden einzelnen, um die gewünschten Arrays zu generieren. Hier geht:

function prepOptional($formData) {

    $baseInfo=getBaseInfo();

    $_SESSION['fooData'] = (isset($formData['cbFoo']) ? prepBaseForm($baseInfo, 'foo',
            'Option foo') : '');

    $_SESSION['opt1Data'] = (isset($formData['cbOpt1']) ? prepBaseForm($baseInfo, 'opt1',
            'Option 1') : '');

    $_SESSION['barData'] = (isset($formData['cbBar']) ? prepBaseForm(prepOtherArray($formData), 'bar',
            'Option bar', 'Optional argument') : '');

}

Die Funktion akzeptiert ein formdata-Array als Argument und generiert je nach den enthaltenen Werten die entsprechenden Arrays in der Sitzung; dies geschieht erst, nachdem das Vorhandensein des übereinstimmenden Flags überprüft wurde, daher die issets und der ternäre Operator.

Die aufgerufene Funktion prepBaseForm trennt das Anhängen des zweiten und dritten Arguments, die einem Dateinamen und einem Kommandonamen entsprechen, vom ersten Argument, das ein Array ist; sie akzeptiert auch einen optionalen vierten Parameter, der eine Datei angibt, die mit dem ausgefüllten Formular verkettet werden soll.

Wenn der Wert nicht im Array vorhanden ist, setzt der Code die entsprechende Sitzungsvariable absichtlich auf '', um die Generierungsreihenfolge beizubehalten (zu diesem Zweck: Gibt es eine bessere Möglichkeit, dies zu tun, wenn man bedenkt, dass es Szenarien gibt, in denen die vorgegebene Generierungsreihenfolge nicht eingehalten wird?).

Der eigentliche Code hat etwa zwanzig Generierungsblöcke mit diesem Format, und es wird ziemlich langwierig; eine Optimierung, an die ich gedacht habe, war, eine Schleife durch die angegebenen Felder zu ziehen und den Generierungsprozess zu verallgemeinern, aber wie Sie sehen können, unterscheiden sich die Argumente oft, oder das Eingabefeld für die prepBaseForm-Funktion muss auf andere Weise generiert werden. Haben Sie eine Idee, wie ich dieses Refactoring in Angriff nehmen könnte? Vielen Dank im Voraus für Ihre Antwort.

4voto

ircmaxell Punkte 159431

Eine Möglichkeit wäre, Standardwerte bereitzustellen und sie nur auszuführen, wenn die Werte mit Hilfe normaler Konditionale geändert werden. Dann kann man weiter aufräumen, indem man alles in eine einfache Schleife packt..:

function prepOptional($formData) {
    $baseInfo=getBaseInfo();

    $options = array(
        'foo' => 'Option foo', 
        'opt1' => 'Option Opt1',
        'bar' => 'Option Bar',
    );
    foreach ($options as $name => $text) {
        //Add defaults for formData and Session arrays)
        $formData += array('cb' . ucfirst($name) => '');
        $_SESSION += array($name . 'Data' => '');

        if ($formData['cb' . ucfirst($name)]) {
            $_SESSION[$name . 'Data'] = prepBaseForm(
                $baseInfo, 
                $name, 
                $text
            );
        }
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X