|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2009-09-08 15:03 UTC] 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
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sat Dec 06 21:00:01 2025 UTC |
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.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