我想知道在PHP中是否可以使用这样的东西
$goto = 'end';
goto $goto;
Run Code Online (Sandbox Code Playgroud)
当我使用它时,我得到了Parse error: syntax error, unexpected T_VARIABLE, expecting T_STRING.
此外,我将如何做这样的事情(考虑a()回报true或false)
a() or goto end;
Run Code Online (Sandbox Code Playgroud)
而不是更长的版本
if (!a()) goto end;
Run Code Online (Sandbox Code Playgroud)
非常感谢!
后来编辑:这肯定有很多反应.我想提到两个PHP争论最多的领域(goto和eval)有助于得到一些强烈的反应.无论如何,我要感谢那些努力摆脱他们的"偏执狂"的人(正如有人在评论中所说).我特别要感谢DaveRandom和genesis的答案.
只是为了让事情变得清晰,让一些人放心:我知道不使用goto的原因.但是对于每个"规则"都有例外.
最后一点,我想知道究竟是谁投下来的人的逻辑问题了.这不是一个有效的问题,是不是很清楚,是否可以通过使用搜索引擎轻松回答?我想我永远不会有你动作的动机,"down-vote-user":).
Goto只是这样工作
10:
//something
goto 10;
Run Code Online (Sandbox Code Playgroud)
要么
end:
//something
goto end;
Run Code Online (Sandbox Code Playgroud)
但你的一个是不可能的
是的,我知道使用goto是沮丧的,但实际问题的答案比这些说法要好得多DO NOT USE GOTO GOTO IS EVIL
附录:eval goto
你真的不想这样做:
$goto = 'end';
eval(<<<EOD
goto $goto;
return;
end:
echo 'end';
EOD
);
Run Code Online (Sandbox Code Playgroud)
我能看到这个工作的唯一方法是如果你这样做:
$goto = 'end';
eval("goto $goto;");
Run Code Online (Sandbox Code Playgroud)
然而
eval() 在 99.9% 的情况下应不惜一切代价避免goto。这很少是答案 - 如果您发现自己使用 goto,您可能会更好地检查代码的结构。大多数时候,人们使用 goto 来避免混乱的 if-else 结构,但是您可以做一些(稍微)更好的事情,它可以实现相同的效果:将代码块包装在do {} while (FALSE);. 这意味着您可以调用break跳过代码块的其余部分并直接跳到末尾。这些也可以嵌套,因此您可以调用break 2;etc 来跳到正确的点。
我知道有很多人不同意我的这种做法——让虐待风暴开始吧……
| 归档时间: |
|
| 查看次数: |
1968 次 |
| 最近记录: |