ID:               40823
 Updated by:       [EMAIL PROTECTED]
 Reported By:      php at michaelho dot com
-Status:           Open
+Status:           Bogus
 Bug Type:         Class/Object related
 Operating System: Mac OS X 10.4.9
 PHP Version:      5.2.1
 New Comment:

Please read what Derick said in bug #40625.
It DID NOT work before and the only difference is the notice.

To make it work you need to return __get() result by reference:
<?php
class Foo {
                private $array = array(1, 2, 3);
                public function &__get($name) { //<------- &
                        return (array) $this->array;
                }
        }

        $a = new foo();
        $a->overloaded[] = 4;
        foreach ($a->overloaded as $int)
                print $int . "<br/>";
?>

And that's really easy to explain - you can't change the result of the
__get() method and expect it to affect the object members. 


Previous Comments:
------------------------------------------------------------------------

[2007-03-15 17:17:00] php at michaelho dot com

Description:
------------
This was mistakenly reported as "bogus" in
http://bugs.php.net/bug.php?id=40625

Overloaded array access was implemented then broken, then fixed again
in PHP 5.2.0: http://bugs.php.net/39449

However, with PHP 5.2.1, it was broken once again.

The following code sample works perfectly in 5.2.0, but is broken in
5.2.1

Reproduce code:
---------------
<?php
        class Foo {
                private $array = array(1, 2, 3);
                public function __get($name) {
                        return (array) $this->array;
                }
        }

        $a = new foo();
        $a->overloaded[] = 4;
        foreach ($a->overloaded as $int)
                print $int . "<br/>";
?>

Expected result:
----------------
1
2
3
4

Actual result:
--------------
Notice: Indirect modification of overloaded property Foo::$overloaded
has no effect in /deb/blah/wwwroot/test.php on line 10
1
2
3


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=40823&edit=1

Reply via email to