php 我可以在一个开关中多次使用相同的case值吗

ifsvaxew  于 2023-05-21  发布在  PHP
关注(0)|答案(2)|浏览(149)

我可以这样写一个switch语句吗?

switch ($mood) {

    case hungry : 
    case sad : 
    echo 'Eat a chocolate';

    case sad : 
    echo 'Call Up your friend';

    }

这是一个好的做法吗?
编辑:根据注解删除了break语句。

bihw5rsg

bihw5rsg1#

从技术上讲,可以用相同的值定义多个case,但只有第一个case会被执行。所以基本没用。
switch()文档:
PHP会继续执行语句,直到switch块结束,或者它第一次看到break语句。
由于第一个case中有一个break,因此不会执行其他case,代码将退出switch()块。
考虑下面的代码段:

$var = 'sad';

switch ($var) {
    case 'sad':
        echo 'First';
        break;
    case 'sad':
        echo 'Second';
        break;
}

这将输出First
如果你想在条件为TRUE的情况下执行多个语句,那么在相同的情况下添加它们,如下所示:

switch ($var) {
    case 'sad':
        echo 'First';
        echo 'Second';
        break;
}
bz4sfanl

bz4sfanl2#

这个问题上面显示了一个搜索,所以我想写正确的方法。你不需要多次写入case“sad”,如果它进入case“sad”,它将继续下降,直到“break”。

$mood= "sad";
   switch ($mood) {

    case "sad" : 
    echo 'Eat a chocolate';

    case "hungry" : 
    echo 'Call Up your friend';

    }

$mood= "sad";
    switch ($mood) {

    case "sad" : 
    echo 'Eat a chocolate';

    case "hungry" : 
    echo 'Call Up your friend';
    break;
    }

我不认为这是不好的做法,因为这比if else语句更清晰。
一个很好的使用场景是根据代码/插件的版本处理数据库的更改。例如,如果您必须根据更新调用中的代码版本进行一些更改,则可以使用此方法。

switch ($version) 
    {
      case "1.0":
        // add x field to table a
        // remove y field from table a
      case "1.1":
       // add z field to table b
      case "1.2":
       // create a new table c
      case "1.5":
       // add field m to table c
}

因此,如果版本为1.1,则将执行1.1及以下版本(直到最新版本)中的代码。所以它比if语句更简洁。

相关问题