为什么我不能使用这样的开关?

时间:2011-08-22 21:21:04

标签: php oop

我正在学习OOP PHP。我有几年的程序经验,但想把它提升到一个新的水平。

无论如何,在我干净整洁的代码的心态中,尝试了一些我学到的关于OOP的东西,我尝试了一些普通的PHP Switch语句,这是我以前从未尝试过的,在我看来,这是非常符合逻辑的因为它像这样工作,但它不起作用。

            switch(strtoupper($type)) {
            case "DELETE" || "UPDATE":
                $result['info'] = mysql_affected_rows($this->con);
                break;
            case "INSERT":
                $result['info'] = "Insert Successful";
                break;
            case "SELECT":
                $result['info'] = mysql_num_rows($res);
                $result['data'] = mysql_fetch_array($res);
                break;
        }

发生的情况是,第一种情况,其中带有“或”的那个是匹配的,不管$ type是否包含“SELECT”。如果我有8件事情都有不同的结果,但是有两件事情有相同的结果,为什么我不能像这样使用开关?看起来很垃圾,我必须复制第一个案例。

感谢。

4 个答案:

答案 0 :(得分:10)

使用:

switch(strtoupper($type)) {
        case "DELETE":
        case "UPDATE":
            $result['info'] = mysql_affected_rows($this->con);
            break;
        case "INSERT":
            $result['info'] = "Insert Successful";
            break;
        case "SELECT":
            $result['info'] = mysql_num_rows($res);
            $result['data'] = mysql_fetch_array($res);
            break;
    }

开关没有“或”,您必须单独列出每个案例。

答案 1 :(得分:2)

您应该使用:

case "DELETE":
case "UPDATE":
            $result['info'] = mysql_affected_rows($this->con);
            break;

答案 2 :(得分:2)

  

为什么我不能像这样使用开关?

仅仅因为它不起作用。 "DELETE" || "UPDATE"是一个表达“字符串OR字符串”的表达式,它总是会计算为布尔值true

使用@Danae和@Andrej L所示的符号来解决它。

答案 3 :(得分:1)

像这样:

switch (strtoupper($type)) {
case "DELETE":
case "UPDATE":
   $result['info'] = mysql_affected_rows($this->con);
   break;
}