PHP 8.4.0 RC4 available for testing

goto

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

xkcd-goto.png

Karikatür, » xkcd'nin izniyle.

Goto kullanırsan daha kötü olan şey nedir?


Çevirisi:

Program akışını yapılandırabilir ya da yerine küçük bir goto kullanırım.

Boşver iyi kodu, ne olabilir ki?
goto ...

goto işleci betik içinde başka bir komuta atlamak için kullanılabilir. Hedefin yeri, harf büyüklüğüne duyarlı bir yafta ve iki nokta imi ile belirtilebilir. goto bu yaftaya göre hedefi bulur. Bu, goto deyiminin tamamen sınırsız olduğu anlamına gelmez. Hedef yaftasının aynı dosya ve aynı bağlam içinde kalması gerekir, yani bir işlev veya yöntemin dışına atlayamayacağınız gibi bir başka işlev veya yöntemin içine de atlayamazsınız. Ayrıca bir switch veya döngünün içine de atlayamazsınız, fakat bunların dışına atlayabilirsiniz, yani çok seviyeli bir break yerine bir goto kullanabilirsiniz.

Örnek 1 - goto örneği

<?php
goto a;
echo
'Foo';

a:
echo
'Bar';
?>

Yukarıdaki örneğin çıktısı:

Bar

Örnek 2 - Döngüden goto ile çıkma örneği

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

Yukarıdaki örneğin çıktısı:

j hit 17

Örnek 3 - Bu çalışmaz

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

Yukarıdaki örneğin çıktısı:

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

add a note

User Contributed Notes 5 notes

up
54
Lollo
3 years ago
You should mention the label can't be a variable
up
32
devbyjesus at example dot com
2 years ago
the problem of goto is that it is a good feature but in a large codebase it reduces the readability of the code . that's all . i try to not use it to think about the person who is going to read after me .
up
3
georgy dot moshkin at techsponsor dot io
3 months ago
You can use goto to hide large HTML blocks without using echo():

<html><body>

<?php if ($hide_form_and_script) { goto label_1;} ?>

<form action="" method="post">
<!-- some HTML here -->
</form>
<script>
let a='test'; // no need to escape nested quotes as with echo()
// some JavaScript here
</script>

<?php label_1: ?>

</body></html>
up
6
BPI
2 years ago
You can jump inside the same switch. This can be usefull to jump to default
<?php
$x
=3;
switch(
$x){
case
0:
case
3:
print(
$x);
if(
$x)
goto
def;
case
5:
$x=6;
default:
def:
print(
$x);
}
?>
up
-1
Anonymous
1 year ago
Example to exit loops:

for ($i = 0; $i < 10; $i++) {
for ($j = 0; $j < 10; $j++) {
if ($condition) {
goto exit;
}
}
}
exit:
echo "Out of the loop.";
To Top