I spent quite a while today debugging a problem where call_user_func was not passing a parameter by reference. I was trying to pass an object into a function whose name is not known until run time.
Passing it by reference means that changes made to $var inside foo() are made to the actual variable instead of to a copy of the value (when passed by value). However, for some reason, when calling a function with call_user_func(), it passes everything by value, regardless of how the function is defined.
function foo(&$var) { $var++; } $bar = 1; foo($bar); echo $bar; // outputs '2' $function = 'foo'; call_user_func($function, $bar); echo $bar; // you'd expect this to output 3 now, but it still outputs 2 $function($bar); echo $bar; // outputs 3 now
As the sample code shows, the solution is to avoid the use of the call_user_func() function by using a variable function name. Thanks to Steve Hannah’s blog post at http://www.sjhannah.com/blog/?p=86 for helping me to solve this one.