php计算不间断时间,关于php:switch语句不间断

不包含break的switch语句中的case选项如何自动转发到下一个case,而无需检查?

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();

}

如果参数是"创建的",它将在创建的情况下进行检查,这很好。 当检查成功时,我希望代码继续使用默认选项,这就是为什么不中断的原因。 但是相反,它继续到" Creator",而$ param!=" Creator"!

我确实知道如何解决此问题(只需在我的情况下"创建"中添加默认代码),但是我不希望重复该代码太多次。 我的实际问题是:为什么案件不是"创作者",为什么继续处理"创作者"案件。

Fallthrough是旨在允许以下代码的故意设计功能:

switch ($command) {

case"exit":

case"quit":

quit();

break;

case"reset":

stop();

case"start":

start();

break;

}

它的设计使执行过程因案例而异。

default与其他情况一样,不同之处在于,如果没有触发其他情况,则跳到那里。这绝不是"在运行实际选定的案例后执行此操作"指令。在您的示例中,您可以考虑:

switch($param) {

case"created":

if(!($value instanceof \DateTime))

throw new \Exception("\DateTime expected,".gettype($value)." given for self::$param");

break;

case"Creator":

if(!($value instanceof \Base\User)) {

throw new \Exception(get_class($value)." given. \Base\User expected for self::\$Creator");

}

break;

}

$this->$param = $value;

这里的经验法则是,如果不依赖于开关,请将其移出开关。

我要补充一点-尽管穿透有时是有用的-最好不要在两种情况都做某事而不是仅仅穿透的情况下使用它(良好:case"created": case"creator": case"something_else": do_stuff();不良:case"created": do_stuff(); case"creator": do_Second_stuff(); case"something_else": do_remaining_stuff();)

@dbemerlin:这确实很危险,尽管如果案例简短或使用支持显式失败的语言(例如C#)可以接受,但确实是非常危险的。

最好是添加一条评论以说失败是故意的。

我真的没看到你想要的。

如果要在所有情况下都运行默认内容,只需将其放在开关后面即可。

如果只想在"创建的"情况下运行默认的东西,并且在默认的情况下,请交换"创建的"和"创建者"部分的位置,并在第一部分之后放一个空格。

如果您希望该代码仅在创建者或创建者匹配时才运行,则放弃switch语句,并使用if / else OR使用标志和以下if语句。

所有工具都在那里。

它与我想要的无关,而与为什么switch语句如此工作有关。

抱歉我误解了这个问题。 历史就是答案。 像大多数编程一样,有人这么说。 他们是这样说的。 那里有一些历史(基本上是C启动的),但这就是语法。

也许这会启发您:

跳转表切换案例问题

因为这就是在C语言中完成的方式。

要回答您的"实际问题":为什么在案例不是" Creator"的情况下继续处理" Creator"案例。

因为您没有break。没有它,它将继续进行下面的案例。我能想到的唯一解决方案是将默认代码放入案例中,并添加break。

另外,默认情况下不需要break,因为它是switch块中的最后一种情况。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值