> jvlad wrote: >>> $a = array(1); >>> $b = 0; >>> $c = &$b; >>> foreach($a as $c); >>> Now you are arguing that $b should not be 1? >>> The two pieces of code are identical >> >> It's just a nightmare example. I wonder have you ever see anything like >> this >> in real life? >> Could you please let me see it too, for example in code.google.com? >> If you cann't, what are you fighting for? >> Interestingly, how many people will consider the code sample you >> demonstrated ugly... >> How many sporadic problems were already created and will be created just >> beacause >> of this unclear behavior of foreach? > > It isn't unclear. It is perfectly consistent. Whether it is ugly or > not is irrelevant.
Even though you can kill somebody using hammer, does it mean that it _is_ the feature to be preserved in all future versions of the hammer? Also, you didn't answer why another function that is WIDELY used, is going to hell. Why don't you defend its features which go to hell with this function? Why don't you defent the language BC in this case? What does make your position so selective? Why a useless and harmful (yes it's harmful according to so many posts) feature is preserved while uselfull and needed function is going away? > >>> And I don't see how your prev/next stuff has anything to do with this. >> >> >> Ok. What my stuff has to do with this is there: >> If prev/next were consistent with foreach, they would return first/last >> element of the >> array respectively as soon as they reached the boundary. But no! They >> return >> FALSE. > > Which has nothing to do with the question at hand here. We are talking > about breaking any reference in the variables used in the loop > construct. We are not talking about any other behaviour here. Please have a look at this page http://www.php.net/manual/en/control-structures.foreach.php It's where you can find the following: ------------------------------------------------------------------------------ You may have noticed that the following are functionally identical: <?php $arr = array("one", "two", "three"); reset($arr); while (list(, $value) = each($arr)) { echo "Value: $value<br />\n"; } foreach ($arr as $value) { echo "Value: $value<br />\n"; } ?> ------------------------------------------------------------------------------ I checked and it appears that they are not identical, quite the opposite, they expose the difference I mentioned before. Each() assigns NULL to the value after the array pointer reached end. ForEach() stays with last element in this case: compare the output: <?php $arr = array("one", "two", "three"); reset($arr); while (list(, $value) = each($arr)) { echo "Value: $value<br />\n"; } var_dump($value); ?> <?php $arr = array("one", "two", "three"); foreach ($arr as $value) { echo "Value: $value<br />\n"; } var_dump($value); ?> -jv -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php