我可以这样写一个switch语句吗?
switch ($mood) { case hungry : case sad : echo 'Eat a chocolate'; case sad : echo 'Call Up your friend'; }
这是一个好的做法吗?编辑:根据注解删除了break语句。
bihw5rsg1#
从技术上讲,可以用相同的值定义多个case,但只有第一个case会被执行。所以基本没用。switch()文档:PHP会继续执行语句,直到switch块结束,或者它第一次看到break语句。由于第一个case中有一个break,因此不会执行其他case,代码将退出switch()块。考虑下面的代码段:
switch()
break
$var = 'sad'; switch ($var) { case 'sad': echo 'First'; break; case 'sad': echo 'Second'; break; }
这将输出First。如果你想在条件为TRUE的情况下执行多个语句,那么在相同的情况下添加它们,如下所示:
First
TRUE
switch ($var) { case 'sad': echo 'First'; echo 'Second'; break; }
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语句更简洁。
2条答案
按热度按时间bihw5rsg1#
从技术上讲,可以用相同的值定义多个case,但只有第一个case会被执行。所以基本没用。
switch()
文档:PHP会继续执行语句,直到switch块结束,或者它第一次看到break语句。
由于第一个case中有一个
break
,因此不会执行其他case,代码将退出switch()
块。考虑下面的代码段:
这将输出
First
。如果你想在条件为
TRUE
的情况下执行多个语句,那么在相同的情况下添加它们,如下所示:bz4sfanl2#
这个问题上面显示了一个搜索,所以我想写正确的方法。你不需要多次写入case“sad”,如果它进入case“sad”,它将继续下降,直到“break”。
或
我不认为这是不好的做法,因为这比if else语句更清晰。
一个很好的使用场景是根据代码/插件的版本处理数据库的更改。例如,如果您必须根据更新调用中的代码版本进行一些更改,则可以使用此方法。
因此,如果版本为1.1,则将执行1.1及以下版本(直到最新版本)中的代码。所以它比if语句更简洁。