请问大家下面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:
                    //
            }

有更好的 还请大家分享一下 谢谢

阅读 3k
3 个回答

个人观点:不推荐,在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;

从代码规范及可读性上考虑,不建议直接在case后面做逻辑处理,逻辑处理代码单独成块比较好。

想着是高大上但是很少有人那么弄,代码看起来特别乱。逻辑处理还是单独处理的好。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题