Как мне уменьшить код PHP с большим количеством проверок isset и повторяющимися, но переменными аргументами генерации?

Приветствую. Я изо всех сил пытаюсь сократить сегмент кода, который выглядит довольно длинным, что меня не убеждает в его важности. Это функция для создания множества массивов сеансов, используемых для заполнения форм, и она заставляет меня проверять наличие определенных значений в массиве аргументов, с случаями для каждого отдельного, чтобы сгенерировать запрошенные массивы. Вот так:

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') : '');

}

Функция принимает массив formdata в качестве аргумента и в зависимости от содержащихся значений генерирует соответствующие массивы в сеансе; это происходит только после проверки наличия флага соответствия, следовательно, issets и тернарного оператора.

Вызываемая функция, PrepBaseForm, разделяет добавление второго и третьего аргументов, соответствующих имени файла и понятному имени, к первому аргументу, который является массивом; он также принимает необязательный четвертый параметр, указывающий файл, который нужно объединить с заполненной формой.

Если значение не присутствует в массиве, код намеренно очищает соответствующую переменную сеанса до '', чтобы сохранить порядок генерации без изменений (с этой целью: есть ли лучший способ сделать это, учитывая, что существуют сценарии, в которых данный порядок генерации будет нарушен?).

Фактический код имеет около двадцати блоков генерации с этим форматом, и он становится довольно длительный; одна оптимизация, о которой я думал, заключалась в том, чтобы перебрать заданные поля и обобщить процесс генерации, но, как вы можете видеть, часто аргументы различаются или входной массив для функции prepareBaseForm должен быть сгенерирован другим способом. Есть идеи, как мне справиться с этим рефакторингом? Заранее благодарим за ответ.

5
задан Unique_Key 11 February 2011 в 13:33
поделиться