为什么 switch 语句中没有 break 的 case 选项会自动转到下一个 case,而不进行检查?
如果参数是"created",它将在创建案例中进行检查,这是很好的。当检查成功时,我希望代码继续执行默认选项,因此没有break;。但是,当$param != "Creator" 时,它却继续到"Creator"!
我知道如何解决这个问题(只需在我的情况下添加默认代码"created"),但我不想重复使用那段代码。我的实际问题是:为什么它会在情况不是"Creator"的情况下继续使用"Creator"?
try {
switch($param) {
case "created":
if(!($value instanceof \DateTime))
throw new \Exception("\DateTime expected, ".gettype($value)." given for self::$param");
case "Creator":
if(!($value instanceof \Base\User)) {
throw new \Exception(get_class($value)." given. \Base\User expected for self::\$Creator");
}
default:
$this->$param = $value;
break;
}
} catch(Exception $e) {
echo $e->getMessage();
}
如果参数是"created",它将在创建案例中进行检查,这是很好的。当检查成功时,我希望代码继续执行默认选项,因此没有break;。但是,当$param != "Creator" 时,它却继续到"Creator"!
我知道如何解决这个问题(只需在我的情况下添加默认代码"created"),但我不想重复使用那段代码。我的实际问题是:为什么它会在情况不是"Creator"的情况下继续使用"Creator"?
case "created": case "creator": case "something_else": do_stuff();
坏的写法:case "created": do_stuff(); case "creator": do_Second_stuff(); case "something_else": do_remaining_stuff();
)。 - user253984