Привет. Я изо всех сил пытаюсь уменьшить фрагмент кода, который выглядит довольно длинным, и я не уверен в его важности. Это функция для генерации множества сессионных массивов, используемая для заполнения форм, и она позволяет мне проверять наличие определенных значений в массиве аргументов, с возможностью для каждого отдельного генерировать запрошенные массивы. Здесь идет:
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') : '');
}
Функция принимает массив формданных в качестве аргумента и в зависимости от содержащихся значений генерирует соответствующие массивы в сеансе; это происходит только после проверки наличия соответствующего флага, отсюда и issets и троичный оператор.
Вызываемая функция prepBaseForm отделяет добавление второго и третьего аргументов, соответствующих имени файла и понятному имени, к первому аргументу, который является массивом; он также принимает необязательный четвертый параметр, указывающий файл для объединения в заполненную форму.
Если значение отсутствует в массиве, код намеренно очищает соответствующую переменную сеанса до '', чтобы сохранить порядок генерации без изменений (с этой целью: есть ли лучший способ сделать это, учитывая, что есть сценарии, в которых данный порядок генерации будет нарушен?).
Фактический код имеет около двадцати блоков поколения с этим форматом, и он становится довольно длинным; Одна оптимизация, о которой я подумал, состояла в том, чтобы пройтись по заданным полям и обобщить процесс генерации, но, как вы видите, много раз аргументы различаются, или входной массив для функции prepBaseForm должен генерироваться другим способом. Любые идеи о том, как я мог бы заняться этим рефакторингом? Заранее благодарим за ваш ответ.