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.