ID:               44139
 User updated by:  andrea at 3site dot it
 Reported By:      andrea at 3site dot it
 Status:           Open
 Bug Type:         Scripting Engine problem
 Operating System: Windows XP
 PHP Version:      5.2.5
 New Comment:

Sorry, this is what I would like to be able to do:

<?php
$arr    = array(2, 3, 4);
$ref    = new ReflectionFunction('array_unshift');
$ref->invoke($arr, 1);
$ref->invokeArgs(array($arr, 1));
var_dump($arr);
exit;
?>

Without fatal errors, simply because if send by reference is
deprecated, ReflectionFunction (... and I didn't test ReflectionMethod
...) should be able to manage correctly variables by references.

This is another Fatal Error example:

<?php
function unshift(&$arr, $mix){
    return  array_unshift($arr, $mix);
}
$arr    = array(2, 3, 4);
$ref    = new ReflectionFunction('unshift');
$ref->invoke($arr, 1);
$ref->invokeArgs(array($arr, 1));
var_dump($arr);
exit;
?>

I hope these examples explain correctly where and what is the problem.
Kind Regards


Previous Comments:
------------------------------------------------------------------------

[2008-02-18 09:42:17] andrea at 3site dot it

Felipe, I'm testing PHP Version 5.2.6-dev and I have the same problem.

<?php
$arr    = array(2, 3, 4);
$ref    = new ReflectionFunction('array_unshift');
$ref->invoke(&$arr, 1);
$ref->invokeArgs(array(&$arr, 1));
var_dump($arr);
exit;
?>

Warning: Call-time pass-by-reference has been deprecated; If you would
like to pass it by reference, modify the declaration of [runtime
function name](). If you would like to enable call-time
pass-by-reference, you can set allow_call_time_pass_reference to true in
your INI file in ...

I guess above warning should not exists. So, can you confirm that this
is a bug?
Cheers

------------------------------------------------------------------------

[2008-02-17 23:41:00] [EMAIL PROTECTED]

$ref->invoke(&$arr, 1);
$ref->invokeArgs(array(&$arr, 0));
var_dump($arr); // correct and expected result

Doesn't show warning on 5.2.6 and 5.3. That was my message.

------------------------------------------------------------------------

[2008-02-17 23:17:39] andrea at 3site dot it

Hi Felipe, I don't understand your messages.

I know that it generates a Fatal error as I know that send the array
forcing reference works as expected but it generates a warning.

As I wrote on php.net manual too, to solve this strange behaviour I
used a "non-sense" strategy (at least for me) ...

$arr = array(2, 3, 4);
$ref = new ReflectionFunction('array_unshift');
$ref->invokeArgs(array_merge(array(&$arr), array(1)));
$ref->invokeArgs(array_merge(array(&$arr), array(0)));
// $arr == [0,1,2,3,4]

I can't understand why one single value is accepted by reference inside
an array while more than one is not accepted.

Since PHP 5 should manage by itself references I think that
ReflectionFunction should do the same, without reference requirement but
working as expected.

Do you think am I wrong?
Kind Regards

------------------------------------------------------------------------

[2008-02-17 19:45:57] [EMAIL PROTECTED]

Ops... 5_3 also issued 'Fatal error'.

Warning: Parameter 1 to array_unshift() expected to be a reference,
value given in %s on line %d

Fatal error: Uncaught exception 'ReflectionException' with message
'Invocation of function array_unshift() failed' in %s:%d
Stack trace:
#0 %s(19): ReflectionFunction->invoke(Array, 1)
#1 {main}
  thrown in %s on line %d


------------------------------------------------------------------------

[2008-02-17 19:40:54] [EMAIL PROTECTED]

PHP 5.2.6:

$ref->invoke($arr, 1);
Fatal error: Uncaught exception 'ReflectionException' with message
'Invocation of function array_unshift() failed' 

$ref->invokeArgs(array($arr, 0));
Fatal error: Uncaught exception 'ReflectionException' with message
'Invocation of function array_unshift() failed'

PHP 5.3.0:

$ref->invoke($arr, 1); and $ref->invokeArgs(array($arr, 0));
Warning: Parameter 1 to array_unshift() expected to be a reference,
value given



------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/44139

-- 
Edit this bug report at http://bugs.php.net/?id=44139&edit=1

Reply via email to