我即将使用goto语句

Chr*_* G. 12 php

救我脱离猛禽死亡 - 有没有更好的方法来处理这种结构?

while(condition) {
    $this->phase1();
    $this->phase2();
    $this->phase3();
    $this->phase4();
}
Run Code Online (Sandbox Code Playgroud)

在这些方法中的任何一种中,都可以满足条件.在条件满足后立即,循环必须退出.例如,如果我可以调用break;内部phase2();,我就不需要goto语句(当然,这会引发错误).

Bra*_*och 11

返回一个布尔值来执行每个阶段直到成功.

while (condition) {
    if ($this->phase1() || $this->phase2() || $this->phase3() || $this->phase4()) {
        // Success!
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 此方法假设每个阶段都是具有单个成功/失败测试的原子操作.如果你在一个可以达到成功状态的阶段中有多个案例,那么整个代码很可能只是结构很差. (3认同)
  • @Chris你也可以简单地返回true; 从满足条件的那一阶段开始. (2认同)

Ric*_*uen 7

或者你可以使用状态模式!

总之,而不是具有goto语句,改变内部状态的$this,使得方法phase1,phase2,phase3phase4不会产生影响,是空的功能.因为它们将是空函数,所以你将飞过它们并退出循环!

您可能还需要一些事件或观察者模式,以了解何时更改状态.