我听说传言说PHP是计划引入一个"转到"命令。什么是它应该做的?

我已经试过搜索一下,但还没有找到任何东西非常的描述性的。我的理解是,它不会是一个"GOTO 10"-就像命令...

有帮助吗?

解决方案

他们是不是加入一个真正的GOTO,但延伸突破的关键词为使用静态标签。基本上,它将加强能够打出来的 开关 嵌套如果发言。这里的概念的例子,我发现:

<?php
for ($i = 0; $i < 9; $i++) {
    if (true) {
        break blah;
    }
    echo "not shown";
    blah:
    echo "iteration $i\n";
}
?>

当然,一旦转到"谣言",有什么可以阻止一些邪恶的人传播的一个额外的 COMEFROM 笑话。是在你的脚趾。

参见:

http://www.php.net/~德里克/会议。html#添加-转到

其他提示

我总是惊讶于如何令人难以置信的愚蠢的PHP设计师。如果目的使用goto语句是为了使打破乘嵌套 循环更加有效还有一个更好的方式:标记代码块 和断裂的声明,可以参考的标签:

a:  for (...) {
    b:  for (...) {
         c: for (...) {
               ...
               break a;
           }
       }
   }

现在是明确这循环/阻止退出和退出的是结构化的;你不能得到意大利的代码这样你可以用真正的goto语句.

这是一个古老、老、老想法。设计良好的控制流程管理 结构已经解决了70年代以来,文献中对这一切 是长久以来编写的。该博姆-Jacopini定理表明, 你可以代码任何与功能的电话,如果-然后-别,并同时循环。在实践,以打破深深地嵌套块,博姆-Jacopini风格 编码所需要的额外的布尔的标志("设定这种标志要摆脱的循环") 它是笨拙的编码的智慧和效率低下(你不想这样的标志 在你内在的循环)。如果-然后-其他各种循环(虽然为) 和突破,以标记的方框,可以代码算法的任何没有没有 损失的效率。为什么没人阅读的文学,不是 复印的是什么C没有?哎呀.

当然,我不PHP程序员,并且我不知道什么PHP的确切执行GOTO会看起来像,但是这里是我的了解转到:

GOTO仅仅是一个更明确的流动控制的声明。让我们说你有一些嵌套的循环,你只需要找到一件事。你可以放在一个有条件的声明(或若干)和在满足条件时适当,可以使用转到的发言得到了所有的循环,(而不是具有"中断"的声明,在每个级别的嵌套带有条件的声明。是的,我相信,传统的执行是有名片公司的财产,转到的声明可以跳到的名字。你可以做像这样的东西:

for(...) {
    for (...) {
        for (...) {
        // some code
        if (x) GOTO outside;
        }
    }
} 
:outside

这是一个简单的(和更有效)实施比没有转发言。等值将是:

for(...) {
    for (...) {
        for (...) {
            // some code
            if (x) break;
        }
        if(x) break;
    }
    if(x) break;
} 

在第二种情况下(这是常见的做法),有三个条件的声明,这显然是缓慢不仅仅是具有一个。因此,对于优化/简化原因,你可能想要使用转到的发言紧密地嵌套的循环。

在给出的例子通过 steveth45 你可以使用一个功能来代替:

function findItem(...) {
  for (...) {
    for (...) {
      for (...) {
        if (x) {
          return theItem;
        }
      }
    }
  }
}

// no need for label now
theItem = findItem(a, b, c);

它的 看起来 就像它目前在PHP5.3,但不是充分记录。从什么我可以告诉它分享其转到语法C,所以应该可以很容易地选择和使用。只要记住Dijkstra 警告 并使用它只有当必要的。

@steveth45

我的经验法则是,如果你有套代码超过3个级别深刻,你正在做的 事情是错误的。

然后你不必担心使用多断言或转到:D

还有一个 goto 在php> http://php.net/manual/en/control-structures.goto.php, 但是我不会用它,只是写正常的代码...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top