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