有没有办法为PHP goto
定义全局标签(类似变量),以便在函数声明中使用它。我想做以下事情:
function myFunction() {
if (condition) {
goto someLine;
}
}
someLine:
// ....
myFunction();
当我使用此代码时,它说
PHP Fatal error: 'goto' to undefined label "someLine"
我知道不建议使用goto
语句。但在我的情况下,我需要它。我知道也许总是有goto
的替代品,只是在我的情况下它会使代码更容易和可理解
答案 0 :(得分:8)
你无法转到我认为的函数之外:http://php.net/manual/en/control-structures.goto.php
直接引用: 这不是完全不受限制的转到。目标标签必须位于同一文件和上下文中,这意味着您不能跳出函数或方法,也不能跳到一个。
这可能与php被解析并跳出函数会导致内存泄漏等因素有关,因为它从未正确关闭。 正如上面所说的其他人一样,你真的不需要goto。您可以从函数中返回不同的值,并为每个值设置条件。 Goto对于现代编码来说只是非常糟糕的做法(如果您使用的是基本的,则可以接受)。
示例:
function foo(a) {
if (a==1) {
return 1;
} elseif (a==3) {
return 2;
} else {
return 3;
}
}
switch (foo(4)) { //easily replaceable with elseif chain
case 1: echo 'Foo was 1'; break; //These can be functions to other parts of the code
case 2: echo 'Foo was 3'; break;
case 3: echo 'Foo was not 1 or 3';
}
答案 1 :(得分:3)
无法跳入或跳出某个功能。但既然你说你需要它,那么这就是另一种选择。
function myFunction() {
if (condition) {
return true;
}
return false;
}
someLine:
// ....
$func = myFunction();
if($func == true) goto someLine;
答案 2 :(得分:2)
如前所述,你不能。至于“我需要它”,我非常怀疑这一点。无论您在someLine:
处拥有什么代码,都可以轻松地将其作为一个函数,如果需要,您可以从另一个函数调用。
答案 3 :(得分:0)
是的,只要该函数在同一个php文件中声明,或者如果它在另一个脚本中包含,那么就有了这种方式,
跳转到某条线的最佳方法是返回你的goto代码,以便在调用函数时收到返回值..希望这有帮助
function foo($b="30")
{
$a=30;
if($a==intval($b))
return "someline:goto
someline";
}
try{
eval(foo());
}
catch(IOException $err)
{
exit($err);
}
/*someline is somewhere here
for example */