A change in the handling of function arguments

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View
Between Dec 16, 2005 and May 31, 2006 a significant change occurred in
one aspect of how php (version 5.1 on Win XP) arguments are handled.
Consider the following script which changed behaviour in that

// Will func2 show 3 or 4 args from the following call?
argTester("func2", "two", "three", "four");

function argTester() {
  // does a call to its first argument
  print "in argTester with " . func_num_args() . " args;";
  print " arg1: " . func_get_arg(0) . "\n\n";
  return call_user_func_array (
    "".array_shift($argsRest=func_get_args()), $argsRest); }

function func2 ($arg0) {
  // displays its arguments
  $aArg = func_get_args();
  print "In " . __FUNCTION__ . " with " . func_num_args();
  print " args: " . implode("; ", $aArg); }

Should func2 show 3 or 4 arguments based on the last line of

What I would like to determine is why the change came about,
and whether it was intentional or an artifact due to something else.
Could anyone point me to the proper group or person, please.

Csaba Gabor from Vienna

Re: A change in the handling of function arguments

In E_ALL | E_STRICT mode, the warning is: PHP Strict Standards:  Only
variables should be passed by reference

array_shift expects a variable, but the newer php considers the
argument being passed an anonymous value it seems...

You can fix this by doing $rest = func_get_args() before array_shift.

Quoted text here. Click to load it

Site Timeline