ID: 36523 User updated by: rjnewton at efn dot org Reported By: rjnewton at efn dot org -Status: Bogus +Status: Open Bug Type: Documentation problem Operating System: Windows XP PHP Version: Irrelevant New Comment:
"Advanced C users may be familiar with a different usage of the do-while loop, to allow stopping execution in the middle of code blocks, by encapsulating them with do-while (0), and using the break statement. The following code fragment demonstrates this: " The above appeared in the PHP Manual (php_manual_en.chm) downloaded within the past five days from this site. The location within the manual is provided in my correction of the original post. Yes, of course this is bogus. That is why I am making an effort to get it corrected. Please read and comprehend before commenting in the future. Previous Comments: ------------------------------------------------------------------------ [2006-02-25 12:47:33] [EMAIL PROTECTED] do { /* this code will be executed once */ } while (0); I wonder where you saw that while(0) will produce an endless loop until break;. Using a do-while(0) allows you to break it at the middle of the block, that's all. anyway: "Don't worry if you don't understand this right away or at all. You can code scripts and even powerful scripts without using this 'feature'." ------------------------------------------------------------------------ [2006-02-25 03:01:26] rjnewton at efn dot org Documentation reference should have been Language Reference|Control Structures|do-while rather than Language Reference|Control Structures|while. Also, "thus $ < 5 will evaluate true." Should have been "thus $i < 5 will evaluate true." in the Expected Results section. Sorry, Joseph ------------------------------------------------------------------------ [2006-02-25 02:48:44] rjnewton at efn dot org Description: ------------ Current PHP manual [Tue Nov 22 00:57:49 2005] suggests under Language Reference|Control Structures|while that while(0) keeps a loop in play until a break condition occurs. This is the reverse of the actual case. Reproduce code: --------------- <?php $i = 12; $factor = 0.5; $minimum_limit = 2; do { if ($i < 5) { echo "i is not big enough\n"; break; } $i *= $factor; if ($i < $minimum_limit) { break; } echo "i is ok\n"; /* process i */ } while (0); ?> Expected result: ---------------- Should make two full passes through the loop, the exit at the first if statement of the third loop, since $i will then be 3, thus $ < 5 will evaluate true. This is the behavior when while(1) is used as the control condition. Actual result: -------------- using while(0): D:\newtonj\PHPstuff>php hello.php i is ok using while(1): D:\newtonj\PHPstuff>php hello.php i is ok i is ok i is not big enough ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=36523&edit=1