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

Reply via email to