ID: 39337 Updated by: [EMAIL PROTECTED] Reported By: phpbugs at thequod dot de -Status: Open +Status: Bogus Bug Type: Arrays related Operating System: Ubuntu Linux PHP Version: 5CVS-2006-11-01 (CVS) New Comment:
Ilia is talking about this warning: Notice: Indirect modification of overloaded property A::$foo has no effect Previous Comments: ------------------------------------------------------------------------ [2007-01-14 05:26:37] phpbugs at thequod dot de ilia, which warning are you talking about? There's no (PHP) warning?! All I want to say is: overloading of arrays by e.g. "$Foo->bar[] = 1" does not work, if $bar is not defined as a member in the class definition (without a value, of course). ------------------------------------------------------------------------ [2007-01-07 21:57:20] [EMAIL PROTECTED] foo property is not actually created, hence the warning. ------------------------------------------------------------------------ [2007-01-07 19:31:07] phpbugs at thequod dot de iliaa, thanks for taking the time to look at this. Unfortunately I don't understand your note. A::$foo is overloaded in class B and there it shows the IMHO correct behaviour (because in class B there's "var $foo"). The expected result in the last code example would have been: A: ---------------- array(1) { [0]=> int(1) } B: ---------------- array(1) { [0]=> int(1) } instead of: A: ---------------- array(0) { } B: ---------------- array(1) { [0]=> int(1) } ------------------------------------------------------------------------ [2007-01-07 04:10:47] [EMAIL PROTECTED] Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php Notice: Indirect modification of overloaded property A::$foo has no effect. This is why the assignment has no effect. ------------------------------------------------------------------------ [2006-11-09 19:01:54] phpbugs at thequod dot de Re: I've also said it before.. it works, if the var is set in the constructor. To see the diff: ------------------------------------ <?php class A { private $vars; function __get($v) { if( isset($this->vars[$v]) ) return $this->vars[$v]; return array(); } function __set($v, $vv) { echo "__set: '$v'\n"; var_dump($vv); $this->vars[$v] = $vv; } } class B extends A { var $foo; } $A = new A(); $B = new B(); echo "A: ----------------\n"; $A->foo[] = 1; var_dump( $A->foo ); echo "B: ----------------\n"; $B->foo[] = 1; var_dump( $B->foo ); ?> ----------------------------------- Result: ------- A: ---------------- array(0) { } B: ---------------- array(1) { [0]=> int(1) } ------------------------------------------------------------------------ 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/39337 -- Edit this bug report at http://bugs.php.net/?id=39337&edit=1