Etienne Kneuss wrote:
Hello,

On Wed, Mar 17, 2010 at 3:40 PM, mathieu.suen
<mathieu.s...@easyflirt.com> wrote:
Ionut G. Stan wrote:
Hi,

This is interesting and it appears the following change makes the snippet
work as expected:

   public function &__get($name);
I think is that the $this->anArray['bar'] = 4;

Generate the following bytcode:

0  FETCH_OBJ_W                                      $0      'anArray'
1  ZEND_ASSIGN_DIM                                          $0, 'bar'

Will the folloing :

echo $this->anArray;
$this->anArray['bar'];

0  FETCH_OBJ_R                                     $0      'anArray'
1  ECHO
...



IMHO I think that the complexity of the VM is way to hight.
That is something I am strongly agree with Gilad Bracha on adding new
feature into a language:

What exactly would you like it do? You've two options:

1) __get, define the property, and then __set?
2) __get returns a ref that is modified

The second option is taken by PHP.
In your case you return a value, not a reference.

I think there is a lot  to say why is not working but just look at those
2 execution:

---------------- 1st
class A
{

        public function __get($name)
        {
                $this->$name = array();
                return $this->$name;
        }

        public function test()
        {
                $this->_zork;
                $this->_zork['bar'] = 67;
        }
}

$a = new A;
$a->test();

var_dump($a);
---------------- 2nd
class A
{

        public function __get($name)
        {
                $this->$name = array();
                return $this->$name;
        }

        public function test()
        {
                $this->_zork['bar'] = 67;
        }
}

$a = new A;
$a->test();

var_dump($a);
----------------


Adding something that don't have side effect make the side effect
work.... (more or less)
You almost have to know how the VM is implemented in other to know what
is going on.
Nothing is obvious.

Look at the last paragraph:
http://gbracha.blogspot.com/2009/09/systemic-overload.html

On 3/17/10 3:55 PM, mathieu.suen wrote:
Hi,


I came across a strange behavior when using the magic method __get and
some instance variable that should be an array.
Consider the following example:


class A
{

public function __get($name)
{
$this->$name = array();
return $this->$name;
}

public function test()
{
$this->_zork['bar'] = 67;
}
}

$a = new A;
$a->test();

var_dump($a);


So could someone explain me what is the semantic of the above statements?

Thanks


-- Mathieu Suen
--Mathieu Suen


--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

-- Mathieu Suen

        



--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to