簡體   English   中英

我怎么能用大量的isset檢查和重復的生成參數來減少PHP代碼?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM