您应该提到标签不能是变量。
(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 的问题在于它是一个很好的特性,但在大型代码库中,它会降低代码的可读性。仅此而已。我尽量不使用它,以便考虑到之后阅读代码的人。
您可以使用 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>