[英]How could I reduce PHP code with lots of isset checks and repetitive, but variable generation arguments?
問候。 我正在努力減少看起來相當冗長的代碼段,讓我不相信它的必要性。 它是一個生成用於填充表單的多個會話數組的函數,它讓我驗證參數數組中是否存在某些值,每個單獨的值都可以生成所請求的數組。 開始:
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將第二個和第三個參數(對應於文件名和友好名稱)的附加分隔到第一個參數,即數組; 它還接受一個可選的第四個參數,指示要連接到填充表單的文件。
如果數組中不存在該值,則代碼會故意將相應的會話變量清除為''以保持生成順序不變(為此:有更好的方法可以做到這一點,考慮到有些情況,其中給定的生成順序會被打破嗎?)。
實際的代碼有大約二十個具有這種格式的生成塊,並且它變得非常冗長; 我想到的一個優化是循環遍歷給定的字段並概括生成過程,但正如您所看到的,很多時候參數不同,或者必須以另一種方式生成prepBaseForm函數的輸入數組。 關於如何解決這種重構的任何想法? 在此先感謝您的回復。
一種選擇是提供默認值,如果使用正常條件更改值,則運行它。 然后你可以通過將所有內容放入一個簡單的循環來進一步清理:
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
);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.