题
我听说传言说PHP是计划引入一个"转到"命令。什么是它应该做的?
我已经试过搜索一下,但还没有找到任何东西非常的描述性的。我的理解是,它不会是一个"GOTO 10
"-就像命令...
解决方案
他们是不是加入一个真正的GOTO,但延伸突破的关键词为使用静态标签。基本上,它将加强能够打出来的 开关 嵌套如果发言。这里的概念的例子,我发现:
<?php
for ($i = 0; $i < 9; $i++) {
if (true) {
break blah;
}
echo "not shown";
blah:
echo "iteration $i\n";
}
?>
当然,一旦转到"谣言",有什么可以阻止一些邪恶的人传播的一个额外的 COMEFROM 笑话。是在你的脚趾。
参见:
其他提示
我总是惊讶于如何令人难以置信的愚蠢的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);
@steveth45
我的经验法则是,如果你有套代码超过3个级别深刻,你正在做的 事情是错误的。
然后你不必担心使用多断言或转到:D
还有一个 goto
在php> http://php.net/manual/en/control-structures.goto.php, 但是我不会用它,只是写正常的代码...