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

Reply via email to