note 118235 added to control-structures.goto
| From: | D.Kellner | Date: | Sat, 31 Oct 2015 14:12:04 +0000 |
| Subject: | note 118235 added to control-structures.goto | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-204059@lists.php.net to get a copy of this message | ||
However hated, goto is useful. When we say "useful" we don't mean "it should be
used all the time" but that there are certain situations when it comes in handy.
There are times when you need a logical structure like this:
<?php
// ...
do {
$answer = checkFirstSource();
if(seemsGood($answer)) break;
$answer = readFromAnotherSource();
if(seemsGood($answer)) break;
// ...
}while(0);
$answer = applyFinalTouches($answer);
return $answer;
?>
In this case, you certainly implemented a goto with a "fake loop pattern". It could be a
lot more readable with a goto; unless, of course, you hate it. But the logic is clear: try
everything you can to get $answer, and whenever it seems good (e.g. not empty), jump happily to the
point where you format it and give it back to the caller. It's a proper implementation of a
simple fallback mechanism.
Basically, the fight against goto is just a side effect of a misleading article many decades ago.
Those monsters are gone now. Feel free to use it when you know what you're doing.
----
Server IP: 72.52.91.14
Probable Submitter: 31.46.255.201
----
Manual Page -- http://php.net/manual/en/control-structures.goto.php
Edit -- https://master.php.net/note/edit/118235
Del: integrated -- https://master.php.net/note/delete/118235/integrated
Del: useless -- https://master.php.net/note/delete/118235/useless
Del: bad code -- https://master.php.net/note/delete/118235/bad+code
Del: spam -- https://master.php.net/note/delete/118235/spam
Del: non-english -- https://master.php.net/note/delete/118235/non-english
Del: in docs -- https://master.php.net/note/delete/118235/in+docs
Del: other reasons-- https://master.php.net/note/delete/118235
Reject -- https://master.php.net/note/reject/118235
Search -- https://master.php.net/manage/user-notes.php