Re: Whacky increment/assignment logic with $foo++ vs ++$foo
| From: | tedd | Date: | Sat, 03 Oct 2009 14:45:00 +0000 |
| Subject: | Re: Whacky increment/assignment logic with $foo++ vs ++$foo | ||
| References: | 1 2 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-298523@lists.php.net to get a copy of this message | ||
At 5:12 PM -0400 10/2/09, Robert Cummings wrote:
Daevid Vincent wrote:Rob: Your examples are fine -- no problems whatsoever. I do the same thing myself. The problem I see here is with the original statement of: $num = $$num++; That's just bad form -- it doesn't do anything except inject confusion. Cheers, tedd -- ------- http://sperling.com http://ancientstones.com http://earthstones.com<?PHP $num = 123; $num = $num++; print $num; //this prints 123 and not 124 ?!! $num = 123; $num = ++$num; print $num; //this prints 124 as expected $num = 123; $num++; print $num; //this prints 124 as expected $num = 123; print $num++; //this prints 123 and not 124 ?!! print $num++; //this NOW prints 124 ?> So then I read the manual because I think I'm loosing my mind and perhaps it's backwards day and nobody told me: http://us3.php.net/manual/en/language.operators.increment.php I'm baffled as to the reasoning behind: "$a++ :: Post-increment :: Returns $a, then increments $a by one." Why would you EVER want $num = $num++; to give you back the value you already had? Even if we did $foo = $bar++; I would still logically (and common sensely) expect $foo to be the increment of $bar! It also seems counter-intuitive, as I was always lead to believe everything is processed on the right of an equals sign and then assigned back to the left side of the equals sign. In this case, it does a mixture of both. Can someone PLEASE explain why the developers of PHP chose this seemingly whacky logic?This logic is almost universal in modern programming languages. Some people do the following: <?php $index = 1; foreach( @items as @item ) { echo '<tr>'.'<td>'.($index++).'</td>' .'<td>'.$item.'</td>' .'</tr>';} ?> Some people consider it weird to start at 0 for the above index, because the index is only used when it is 1 or more. But the equivalent of the above is the following: <?php $index = 0; foreach( @items as @item ) { echo '<tr>'.'<td>'.(++$index).'</td>' .'<td>'.$item.'</td>' .'</tr>';} ?> Cheers, Rob. --