php goto变量

Sor*_*anu 3 php goto

我想知道在PHP中是否可以使用这样的东西

$goto = 'end';
goto $goto;
Run Code Online (Sandbox Code Playgroud)

当我使用它时,我得到了Parse error: syntax error, unexpected T_VARIABLE, expecting T_STRING.

此外,我将如何做这样的事情(考虑a()回报truefalse)

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":).

gen*_*sis 7

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)

演示


Dav*_*dom 5

我能看到这个工作的唯一方法是如果你这样做:

$goto = 'end';
eval("goto $goto;");
Run Code Online (Sandbox Code Playgroud)

然而

  • 这可能根本不起作用(我没有可用于测试它的 5.3 安装)
  • eval() 在 99.9% 的情况下应不惜一切代价避免
  • 同上goto。这很少是答案 - 如果您发现自己使用 goto,您可能会更好地检查代码的结构。

大多数时候,人们使用 goto 来避免混乱的 if-else 结构,但是您可以做一些(稍微)更好的事情,它可以实现相同的效果:将代码块包装在do {} while (FALSE);. 这意味着您可以调用break跳过代码块的其余部分并直接跳到末尾。这些也可以嵌套,因此您可以调用break 2;etc 来跳到正确的点。

我知道有很多人不同意我的这种做法——让虐待风暴开始吧……