note 90255 modified in language.oop5.reflection by danbrown

From: Date: Wed, 16 Sep 2009 16:09:20 +0000
Subject: note 90255 modified in language.oop5.reflection by danbrown
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-160705@lists.php.net to get a copy of this message
the newInstanceArgs function cannot call a class' constructor if it has references in its arguments, so be careful what you pass into it: <?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); echo "<pre>"; print_r($arr); print_r($foo); print_r($bar); echo "</pre>"; /* Output: Warning: Invocation of Bar's constructor failed in [code path] on line 31 Fatal error: Call to a member function mod() on a non-object in [code path] on line 58 */ ?> --was-- the newInstanceArgs function cannot call a class' constructor if it has references in its arguments, so be careful what you pass into it: <?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); echo "<pre>"; print_r($arr); print_r($foo); print_r($bar); echo "</pre>"; /* Output: Warning: Invocation of Bar's constructor failed in [code path] on line 31 Fatal error: Call to a member function mod() on a non-object in [code path] on line 58 */ ?> http://php.net/manual/en/language.oop5.reflection.php

« previous php.notes (#160705) next »