您应该提到标签不能是变量
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
goto
运算符可用于跳转到程序中的另一个部分。目标点由一个 *区分大小写的* 标签后跟冒号指定,指令为 goto
后跟所需的目标标签。这不是一个完全不受限制的 goto
。目标标签必须在同一个文件和上下文中,这意味着您不能跳出函数或方法,也不能跳入其中。您也不能跳入任何类型的循环或 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
goto 的问题在于它是一个很好的功能,但在大型代码库中,它会降低代码的可读性。仅此而已。我尽量不使用它,以考虑之后要阅读代码的人。
您可以在同一个 switch 中跳转。这对于跳转到默认值很有用
<?php
$x=3;
switch($x){
case 0:
case 3:
print($x);
if($x)
goto def;
case 5:
$x=6;
default:
def:
print($x);
}
?>
您可以使用 goto 隐藏大型 HTML 块,而无需使用 echo()
<html><body>
<?php if ($hide_form_and_script) { goto label_1;} ?>
<form action="" method="post">
<!-- 这里有一些 HTML -->
</form>
<script>
let a='test'; // 无需像 echo() 那样转义嵌套的引号
// 这里有一些 JavaScript
</script>
<?php label_1: ?>
</body></html>