鍍金池/ 問答/PHP/ 請(qǐng)問大家下面PHP的switch寫法,哪種寫法好?

請(qǐng)問大家下面PHP的switch寫法,哪種寫法好?

           switch ($key) {
                case in_array($key, ['=', '>', '<', '>=', '<=', '<>']):
                    $this->where .= " AND $value $key ?";
                    break;
                case 'like':
                    $this->where .= " AND $value LIKE ?";
                    $item = "%$item%";
                    break;
                case 'like-L':
                    $this->where .= " AND $value LIKE ?";
                    $item = "%$item";
                    break;
                case 'like-R':
                    $this->where .= " AND $value LIKE ?";
                    $item = "$item%";
                    break;
            }

            switch ($key) {
                case in_array($key, ['=', '>', '<', '>=', '<=', '<>']):
                    $this->where .= " AND $value $key ?";
                    break;
                case in_array($key, ['like', 'like-L', 'like-R']):

                    $this->where .= " AND $value LIKE ?";

                    if ($key === 'like') {
                        $item = "%$item%";
                        break;
                    };
                    if ($key === 'like-L') {
                        $item = "%$item";
                        break;
                    }
                    if ($key === 'like-R') {
                        $item = "$item%";
                    }
                    break;
                default:
                    //
            }

有更好的 還請(qǐng)大家分享一下 謝謝

回答
編輯回答
舊言

個(gè)人觀點(diǎn):不推薦,在case后面做公式,直接case單一的值就好。
為什么不推薦? 、邋遢

switch( $search ) {
    case 'like':
        $key.=' like';
        $this->_datas[$key] = '%' . $value . '%';
        break;
    case 'greater':
        $key.=' >=';
        $value = strtotime( $value );
        $this->_datas[$key] = $value;
        break;
    case 'less':
        $key.=' <=';
        $value = strtotime( $value . " +1 day" );
        $this->_datas[$key] = $value;
        break;
    case 'lessthan':
        $key .= ' <=';
        $value = strtotime($value);
        $this->_datas[$key] = $value;
        break;
    case 'big':
        $key.=' >';
        $this->_datas[$key] = $value;
        break;
    case 'small':
        $key.=' <';
        $this->_datas[$key] = $value;
        break;
    case 'in':
        $key.=' in';
        $this->_datas[$key] = '(' . implode( ',', $value ) . ')';
        break;
    case 'notequal':
        $key.=' <>';
        $this->_datas[$key] = $value;
        break;
    case 'noteq':
        $key.=' !=';
        $this->_datas[$key] = $value;
        break;
    default:
        $this->_datas[$key] = $value;
}

如果case下面拼裝sql的代碼一致,可以這樣寫:

case 'big':
case 'small':
case 'noteq':
    $this->_datas[$key] = $value;
2017年10月3日 20:00
編輯回答
壞脾滊

從代碼規(guī)范及可讀性上考慮,不建議直接在case后面做邏輯處理,邏輯處理代碼單獨(dú)成塊比較好。

2018年9月15日 10:59
編輯回答
絯孑氣

想著是高大上但是很少有人那么弄,代碼看起來特別亂。邏輯處理還是單獨(dú)處理的好。

2017年4月20日 12:59