Here are some more, at the request of dopry: PHP 4.4.2: Send 1,000 objects with 500 properties to a function by value: 1400.54ms Send 1,000 arrays with 500 keys to a function by value: 1033.07ms Send 1,000 objects with 25 properties to a function by value: 78.26ms Send 1,000 arrays with 25 keys to a function by value: 51.39ms Send 1,000 objects with 500 properties to a function by reference: 1392.78ms Send 1,000 arrays with 500 keys to a function by reference: 1067.2ms Send 1,000 objects with 25 properties to a function by reference: 79.5ms Send 1,000 arrays with 25 keys to a function by reference: 50.37ms PHP 5.1.2: Send 1,000 objects with 500 properties to a function by value: 734.31ms Send 1,000 arrays with 500 keys to a function by value: 475.04ms Send 1,000 objects with 25 properties to a function by value: 40.94ms Send 1,000 arrays with 25 keys to a function by value: 22.07ms Send 1,000 objects with 500 properties to a function by reference: 698.29ms Send 1,000 arrays with 500 keys to a function by reference: 472.9ms Send 1,000 objects with 25 properties to a function by reference: 36.54ms Send 1,000 arrays with 25 keys to a function by reference: 25.43ms Code: <?php echo "Send 1,000 objects with 500 properties to a function by value: "; timer_start('object_by_val'); for ($i = 0; $i < 1000; $i++) { for ($j = 0; $j < 500; $j++) { $obj = new stdClass(); $prop = (string)$j; $obj->$prop = $j; } do_nothing_val($obj); } $stop = timer_stop('object_by_val'); echo $stop['time'] .'ms <br />'; echo "Send 1,000 arrays with 500 keys to a function by value: "; timer_start('array_by_val'); for ($i = 0; $i < 1000; $i++) { for ($j = 0; $j < 500; $j++) { $arr = array(); $key = (string)$j; $array[$key] = $j; } do_nothing_val($arr); } $stop = timer_stop('array_by_val'); echo $stop['time'] .'ms <br />'; echo "Send 1,000 objects with 25 properties to a function by value: "; timer_start('small_object_by_val'); for ($i = 0; $i < 1000; $i++) { for ($j = 0; $j < 25; $j++) { $obj = new stdClass(); $prop = (string)$j; $obj->$prop = $j; } do_nothing_val($obj); } $stop = timer_stop('small_object_by_val'); echo $stop['time'] .'ms <br />'; echo "Send 1,000 arrays with 25 keys to a function by value: "; timer_start('small_array_by_val'); for ($i = 0; $i < 1000; $i++) { for ($j = 0; $j < 25; $j++) { $arr = array(); $key = (string)$j; $array[$key] = $j; } do_nothing_val($arr); } $stop = timer_stop('small_array_by_val'); echo $stop['time'] .'ms <br />'; echo "Send 1,000 objects with 500 properties to a function by reference: "; timer_start('object_by_ref'); for ($i = 0; $i < 1000; $i++) { for ($j = 0; $j < 500; $j++) { $obj = new stdClass(); $prop = (string)$j; $obj->$prop = $j; } do_nothing_val($obj); } $stop = timer_stop('object_by_ref'); echo $stop['time'] .'ms <br />'; echo "Send 1,000 arrays with 500 keys to a function by reference: "; timer_start('array_by_ref'); for ($i = 0; $i < 1000; $i++) { for ($j = 0; $j < 500; $j++) { $arr = array(); $key = (string)$j; $array[$key] = $j; } do_nothing_ref($arr); } $stop = timer_stop('array_by_ref'); echo $stop['time'] .'ms <br />'; echo "Send 1,000 objects with 25 properties to a function by reference: "; timer_start('small_object_by_ref'); for ($i = 0; $i < 1000; $i++) { for ($j = 0; $j < 25; $j++) { $obj = new stdClass(); $prop = (string)$j; $obj->$prop = $j; } do_nothing_ref($obj); } $stop = timer_stop('small_object_by_ref'); echo $stop['time'] .'ms <br />'; echo "Send 1,000 arrays with 25 keys to a function by reference: "; timer_start('small_array_by_ref'); for ($i = 0; $i < 1000; $i++) { for ($j = 0; $j < 25; $j++) { $arr = array(); $key = (string)$j; $array[$key] = $j; } do_nothing_ref($arr); } $stop = timer_stop('small_array_by_ref'); echo $stop['time'] .'ms <br />'; function do_nothing_val($thing) { return $thing; } function do_nothing_ref(&$thing) { return $thing; } ?>