Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php goto变量_Php_Goto - Fatal编程技术网

php goto变量

php goto变量,php,goto,Php,Goto,我想知道这样的东西在PHP中是否可行 $goto = 'end'; goto $goto; 当我使用它时,我得到解析错误:语法错误,意外的T_变量,需要T_字符串 此外,我将如何做这样的事情(考虑a()返回true或false) 与较长的版本相反 if (!a()) goto end; 非常感谢 纯粹理论上:) 稍后编辑:这肯定引起了很多反应。我认为提到PHP最受争议的两个领域(goto和eval)有助于获得一些强烈的反应。无论如何,我要感谢那些努力克服“偏执狂”的人(正如有人在评论中所

我想知道这样的东西在PHP中是否可行

$goto = 'end';
goto $goto;
当我使用它时,我得到
解析错误:语法错误,意外的T_变量,需要T_字符串

此外,我将如何做这样的事情(考虑
a()
返回
true
false

与较长的版本相反

if (!a()) goto end;
非常感谢

  • 纯粹理论上:)
稍后编辑:这肯定引起了很多反应。我认为提到PHP最受争议的两个领域(goto和eval)有助于获得一些强烈的反应。无论如何,我要感谢那些努力克服“偏执狂”的人(正如有人在评论中所说的)。我特别要感谢达维兰多姆和创世纪的回答

只是为了把事情弄清楚,让一些人放心:我知道不使用goto的原因。但每一条“规则”都有例外


作为最后一点,我想了解实际投票否决该问题的人的逻辑。这不是一个有效的问题,是不是不够清楚,是否可以通过使用搜索引擎轻松回答?我想我永远不会对你的行为有动机,“否决投票用户”:。

Goto只能这样工作

10:
//something

goto 10;

但你的不可能

是的,我知道不鼓励使用
goto
,但回答实际问题比说
不要使用goto goto是邪恶的要好得多

附录:评估转到

你不太可能真的想这么做:

$goto = 'end';

eval(<<<EOD

    goto $goto;
    return; 

    end: 

    echo 'end';
EOD
);
$goto='end';

eval(没有办法(使用
goto
)。此外,除了留下(嵌套)循环外,您不应该对任何东西使用
goto


使用
goto
可以完成的所有其他操作都可以使用“更好的”和更少混乱的方法和代码结构来完成,因此您应该更喜欢这些方法和结构!

不要使用goto,即使这是可能的。改为使用以下方法:

$goto = 'end';
$goto();

function end() {
  echo "This is run\n";
  exit();
}

您也可以在对象上下文中使用
$this->$goto()
-有时非常方便。

我能看到这一点的唯一方法是,如果您这样做:

$goto = 'end';
eval("goto $goto;");
但是

  • 这可能根本不起作用(我没有现成的5.3安装来测试它)
  • 在99.9%的情况下,应不惜一切代价避免使用
    eval()
  • 同上
    goto
    。这很少是答案-如果您发现自己在使用goto,您可能会更好地检查代码的结构
大多数情况下,人们使用goto来避免混乱的if-else结构,但是有一件(稍微)更好的事情可以做,这实现了同样的事情:在
do{}while(FALSE)中包装代码块
。这意味着您可以调用
break
跳过代码块的其余部分并直接跳到末尾。这些代码块也可以嵌套,因此您可以调用
break 2;
等来跳到正确的点


我知道有很多人会不同意我的方法-让滥用风暴开始吧…

goto$goto是不可能的。你想实现什么?为什么要使用goto?你不能改用函数吗?goto命令应该只用于打破嵌套循环。@Ghommy:
纯粹理论上:)
@Ghommey在那个例子中,
break 3也会做同样的工作…如果你要投反对票,请解释原因。。。这个答案没有错。@DaveRandom:谢谢。我正要问同样的问题。可能是不喜欢后藤的人。@hakre:啊。在这种情况下,我想你可以发布你自己的答案,我会投票:)@genesis:这真的不值得一个答案,即使我对goto没有宗教信仰;)我喜欢
do{}while(FALSE)方法。我偶尔会在Java以及PHP和JavaScript中使用它。@DaveRandom:eval goto只适用于作为eval'ed代码一部分的标签。查看我添加到的演示(在编辑之前没有看到您的答案)。@NikiC:确实有效。但是你真的不想这样做。@hakre这是另一个问题。@hakre我认为上面的例子可能不起作用,因为它大致相当于在包含的文件之间执行
goto
,我知道这不起作用(手册中这样说)。不过,我没有想到将整个代码包装在
eval()
中,这显然是可行的,但要实现这一功能,似乎需要走很长的路,您可以通过编写更好的代码来避免首先需要的功能。不过,对于情绪而言,虚拟+1……如果你投了反对票,那么有礼貌地解释一下原因。我的回答与Q(即如何正确地做)直接相关,并且是正确的。我投了反对票,但因为你的声誉不高,我担心你会在之后对我所有的帖子投反对票。原因是他问的是“如何像这样使用它”,而不是“如何解决它,我应该使用它吗?”。当你问我“如何让我的头发着火”时,我会解释怎么做,并且说你不应该这样做。你只做了第二点,这是错误的。谢谢你承认。我不知道恶意的否决投票是否是一个问题,但我不会参与其中。关于回答最初的问题,我同意你的观点,但对于一个有用的(相关的)回应是否值得投否决票,我们可能不得不意见不一。(旁注:正如你正确指出的那样,我是新来的,但我打算对我所有的反对票发表评论。还没有人投票!)谢谢@genesis。(顺便说一句,在这篇文章的另一篇文章中,我想你是在寻找“附录”这个词,而不是“附录”!你的听起来不错,但正确的拉丁语是第一个;-)这段代码的工作原理与“goto”
(在“end”示例中,它是不正确的)。也就是说,它完成了所有的结尾,然后直接跳回到你调用它的地方。对于名为
end
$goto = 'end';
$goto();

function end() {
  echo "This is run\n";
  exit();
}
$goto = 'end';
eval("goto $goto;");