ID: 47955 Updated by: [email protected] 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] [email protected] <?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
