goto

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

What's the worse thing that could happen if you use goto?

此漫画鸣谢 » xkcd

goto 操作符可以用来跳转到程序中的另一位置。该目标位置可以用 区分大小写 的目标名称加上冒号来标记,而跳转指令是 goto 之后接上目标位置的标记。PHP 中的 goto 有一定限制,目标位置只能位于同一个文件和作用域,也就是说无法跳出一个函数或类方法,也无法跳入到另一个函数。也无法跳入到任何循环或者 switch 结构中。可以跳出循环或者 switch,通常的用法是用 goto 代替多层的 break

示例 #1 goto 示例

<?php

goto a;
echo
'Foo';

a:
echo
'Bar';

?>

以上示例会输出:

 Bar 

示例 #2 goto 跳出循环示例

<?php

for ($i = 0, $j = 50; $i < 100; $i++) {
while (
$j--) {
if (
$j == 17) {
goto
end;
}
}
}
echo
"i = $i";
end:
echo
'j hit 17';

?>

以上示例会输出:

 j hit 17 

示例 #3 以下写法无效

<?php

goto loop;
for (
$i = 0, $j = 50; $i < 100; $i++) {
while (
$j--) {
loop:
}
}
echo
"$i = $i";

?>

以上示例会输出:

 Fatal error: 'goto' into loop or switch statement is disallowed in script on line 2 
To Top