#47955 [Opn->Tbd]: ReflectionClass::newInstanceArgs() fails with references
| From: | lbarnaud@php.net | Date: | Thu, 21 May 2009 16:37:39 +0000 |
| Subject: | #47955 [Opn->Tbd]: ReflectionClass::newInstanceArgs() fails with references | ||
| References: | 1 | Groups: | php.bugs php.doc.bugs |
| Request: | Send a blank email to php-bugs+get-137615@lists.php.net to get a copy of this message | ||
ID: 47955
Updated by: lbarnaud@php.net
Reported By: richardcook at gmail dot com
-Status: Open
+Status: To be documented
Bug Type: Reflection related
Operating System: *
PHP Version: 5.*, 6CVS (2009-05-14)
New Comment:
It works when the elements of the array are references:
$reflectionClass->newInstanceArgs(array(&$this, &$this->arr));
Previous Comments:
------------------------------------------------------------------------
[2009-04-13 17:52:58] jani@php.net
<?php
class Foo {
function __construct (&$arr) {
$this->arr = &$arr;
}
function createInstance () {
$reflectionClass = new ReflectionClass("Bar");
return $reflectionClass->newInstanceArgs(array($this, $this-
>arr));
}
function mod($key, $val) {
$this->arr[$key] = $val;
}
}
class Bar {
function __construct (&$foo, &$arr) {
$this->foo = &$foo;
$this->arr = &$arr;
}
function mod($key, $val) {
$this->arr[$key] = $val;
}
}
$arr = array();
$foo = new Foo($arr);
$arr["x"] = 1;
$foo->mod("y", 2);
$bar = $foo->createInstance();
$bar->mod("z", 3);
var_dump($arr,$foo,$bar);
?>
------------------------------------------------------------------------
[2009-04-12 21:54:42] richardcook at gmail dot com
Description:
------------
ReflectionClass::newInstanceArgs throws a constructor fail warning
and does not create the class if the class' constructor has variable
references in it
Reproduce code:
---------------
http://pastebin.com/f4a147910
Expected result:
----------------
Array
(
[x] => 1
[y] => 2
[z] => 3
)
Foo Object
(
[arr] => Array
(
[x] => 1
[y] => 2
[z] => 3
)
)
Bar Object
(
[foo] => Foo Object
(
[arr] => Array
(
[x] => 1
[y] => 2
[z] => 3
)
)
[arr] => Array
(
[x] => 1
[y] => 2
[z] => 3
)
)
Actual result:
--------------
Warning: Invocation of Bar's constructor failed in [code path] on
line 9
Fatal error: Call to a member function mod() on a non-object in [code
path] on line 36
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=47955&edit=1