This came up while working on some code. I want to keep an internal counter within a function, and every time the function is called, return the incremented result. The function ended with return $i++; which, after I typed it, realized may not work as expected.
I wrote this quick test code to figure out what might happen.
<?php function increment() { static $count = 0; // do stuff return $count++; } for($i=0; $i<4; $i++) { echo 'i=' . $i . ' return=' . increment() . "n"; } ?>
I figured one of three things might happen:
Option 1: $count is never incremented because return returns the pre-incremented value and prevents it from incrementing.
i=0 return=0 i=1 return=0 i=2 return=0 i=3 return=0
Option 2: $count is incremented and the incremented value is passed to return.
i=0 return=1 i=1 return=2 i=2 return=3 i=3 return=4
Option 3: The current value of $count is evaluated and passed to the return, $count is incremented, then the function returns.
i=0 return=0 i=1 return=1 i=2 return=2 i=3 return=3
Well it turns out that the function does what I wanted it to do, option 3. Can you explain why the value of $count can be incremented after the function returns?
Tags: php
The ++ operator has special syntax, but if we consider some incrementor functions and their return values everything becomes clear.
Gah, php is filtered out of comments, that’s helpful. Let’s try again.
function postincrement(&$foo) {
// Equivalent to $foo++
$tmp = $foo;
$foo = $foo + 1;
return ($tmp);
}
function preincrement(&$foo) {
// Equivalent to ++$foo
$foo = $foo + 1;
return ($foo);
}