應該要提及標籤不能是變數
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
圖片由 » xkcd 提供
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>