#42644 [Ver->Csd]: For loop comma documentation wrong
| From: | vrana@php.net | Date: | Wed, 21 Nov 2007 16:59:41 +0000 |
| Subject: | #42644 [Ver->Csd]: For loop comma documentation wrong | ||
| References: | 1 | Groups: | php.doc.bugs |
| Request: | Send a blank email to doc-bugs+get-246@lists.php.net to get a copy of this message | ||
ID: 42644
Updated by: vrana@php.net
Reported By: steve dot seear at uk dot ibm dot com
-Status: Verified
+Status: Closed
Bug Type: Documentation problem
Operating System: Windows
PHP Version: Irrelevant
New Comment:
This bug has been fixed in the documentation's XML sources. Since the
online and downloadable versions of the documentation need some time
to get updated, we would like to ask you to be a bit patient.
Thank you for the report, and for helping us make our documentation
better.
"In expr2, all expressions separated by a comma are evaluated but the
result is taken from the last part."
Previous Comments:
------------------------------------------------------------------------
[2007-09-13 11:09:59] rquadling@php.net
<?php
$c = 0;
for ($i = 0 ; true, $c++, false ; ++$i) {
echo 'Loop 1 ', $i, PHP_EOL;
if (2 == $i) {
echo '***Expression 2 failed***', PHP_EOL;
break;
}
}
echo $c, PHP_EOL;
for ($i = 0 ; false, $c++, true ; ++$i) {
echo 'Loop 2 ', $i, PHP_EOL;
if (2 == $i) {
echo '***Expression 2 failed***', PHP_EOL;
break;
}
}
echo $c, PHP_EOL;
?>
outputs ...
1
Loop 2 0
Loop 2 1
Loop 2 2
***Expression 2 failed***
4
This shows that expr2 is processed in it entirety but only uses the
final element to determine if the loop should continue.
Tested with :
PHP 4.4.7-dev (cgi-fcgi) (built: Mar 25 2007 21:02:43)
PHP 5.2.5-dev (cli) (built: Sep 13 2007 04:04:33)
PHP 6.0.0-dev (cli) (built: Sep 13 2007 02:04:41)
------------------------------------------------------------------------
[2007-09-12 15:43:43] steve dot seear at uk dot ibm dot com
Description:
------------
The for loop documentation page at
http://uk3.php.net/manual/en/control-structures.for.php
states that
"Comma separated expressions in expr2 are treated similarly to being
separated by the || operator."
The supplied code shows that this is not the case. According to the
documentation, all the loops in the code fragment should iterate twice,
whereas actually, loop 2 only iterates once. For comma separated
conditions, it appears that only the last condition in the comma
separated list is tested.
Reproduce code:
---------------
<?php
// comma operator in condition
for ($a = $b = 0; $a < 1, $b < 2; $a++, $b++) {
echo "loop 1, iteration $a\n";
}
echo "\n";
for ($a = $b = 0; $b < 2, $a < 1; $a++, $b++) {
echo "loop 2, iteration $a\n";
}
echo "\n";
// || operator in condition
for ($a = $b = 0; $a < 1 || $b < 2; $a++, $b++) {
echo "loop 3, iteration $a\n";
}
echo "\n";
for ($a = $b = 0; $b < 2 || $a < 1; $a++, $b++) {
echo "loop 4, iteration $a\n";
}
echo "\n";
?>
Expected result:
----------------
loop 1, iteration 0
loop 1, iteration 1
loop 2, iteration 0
loop 2, iteration 1
loop 3, iteration 0
loop 3, iteration 1
loop 4, iteration 0
loop 4, iteration 1
Actual result:
--------------
loop 1, iteration 0
loop 1, iteration 1
loop 2, iteration 0
loop 3, iteration 0
loop 3, iteration 1
loop 4, iteration 0
loop 4, iteration 1
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=42644&edit=1