How does return i++ work?

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:

2 Responses to “How does return i++ work?”

  1. Charles says:

    The ++ operator has special syntax, but if we consider some incrementor functions and their return values everything becomes clear.

  2. Charles says:

    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);
    }

Leave a Reply