Edit report at http://bugs.php.net/bug.php?id=49500&edit=1
ID: 49500 Comment by: schindler dot andor at pokhalo dot hu Reported by: casper at procurios dot nl Summary: call_user_func object parameter is not passed as reference Status: Bogus Type: Bug Package: Scripting Engine problem Operating System: Linux PHP Version: 5.3.0 New Comment: Still bogus in PHP 5.3.2, and it's platform irrelevant. I tested on Windows and Mac OS X too. <?php error_reporting(E_ALL | E_STRICT); function foo(&$bar) { echo gettype($bar)."\n"; } class A {} $foo = 'foo'; $a = new a(); $b = array(); foo($a); $foo($a); call_user_func($a); foo($b); $foo($b); call_user_func($b); Result (PHP 5.3.0+): -------------------- object object Warning: Parameter 1 to foo() expected to be a reference, value given in .../proba.php on line 18 array array Warning: Parameter 1 to foo() expected to be a reference, value given in .../proba.php on line 22 Expected result (PHP 5.2.x): ---------------------------- object object object array array array Previous Comments: ------------------------------------------------------------------------ [2009-09-09 07:40:00] casper at procurios dot nl Jani, could you tell me what bug number this is related to? I have been searching for it before I posted this one, searched again now. I found duplicate bug #44626 but that one is marked bogus as well. Two other bugs #43568 & #47402 deal with call_user_func too, but seem unrelated. ------------------------------------------------------------------------ [2009-09-08 17:33:10] j...@php.net Please do not submit the same bug more than once. An existing bug report already describes this very problem. Even if you feel that your issue is somewhat different, the resolution is likely to be the same. Thank you for your interest in PHP. ------------------------------------------------------------------------ [2009-09-08 15:28:48] casper at procurios dot nl My workaround code has a similar issue: function workaroundforbug49500_call_user_func() { $params = func_get_args(); $func = array_shift($params); return call_user_func_array($func, $params); } Casts: 'PHP warning Parameter 1 to myFunction() expected to be a reference, value given' too. func_get_args() seems affected too. ------------------------------------------------------------------------ [2009-09-08 15:03:02] casper at procurios dot nl Description: ------------ When call_user_func is called with an object as it's second parameter, it's not passed as reference. Instead the PHP warning 'Parameter 1 to myFunction() expected to be a reference, value given' is cast. myFunction() is not called at all. This is a major compatibility break from 5.2. Reproduce code: --------------- class MyClass { var $someVar = 'test'; } function myFunction(&$Object) { echo $Object->someVar . "\n"; } $Object = new MyClass(); myFunction($Object); call_user_func('myFunction', $Object); Expected result: ---------------- test test Actual result: -------------- test PHP warning Parameter 1 to myFunction() expected to be a reference, value given ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=49500&edit=1