Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:47389 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 92546 invoked from network); 18 Mar 2010 07:49:50 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 18 Mar 2010 07:49:50 -0000 Authentication-Results: pb1.pair.com header.from=mathieu.suen@easyflirt.com; sender-id=pass Authentication-Results: pb1.pair.com smtp.mail=mathieu.suen@easyflirt.com; spf=pass; sender-id=pass Received-SPF: pass (pb1.pair.com: domain easyflirt.com designates 91.199.255.56 as permitted sender) X-PHP-List-Original-Sender: mathieu.suen@easyflirt.com X-Host-Fingerprint: 91.199.255.56 python-06.easyrencontre.com Linux 2.6 Received: from [91.199.255.56] ([91.199.255.56:51938] helo=mail.easyflirt.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id D1/C0-20429-C1BD1AB4 for ; Thu, 18 Mar 2010 02:49:49 -0500 Received: from [192.168.0.51] (office.easyrencontre.com [78.155.152.6]) by mail.easyflirt.com (Postfix) with ESMTPSA id A7E296374DC; Thu, 18 Mar 2010 08:49:45 +0100 (CET) Message-ID: <4BA1DB19.1080608@easyflirt.com> Date: Thu, 18 Mar 2010 08:49:45 +0100 User-Agent: Thunderbird 2.0.0.23 (X11/20090817) MIME-Version: 1.0 To: Etienne Kneuss , internals@lists.php.net References: <4BA0DF61.1010907@easyflirt.com> <4BA0E39C.7020600@gmail.com> <4BA0E9E8.8000404@easyflirt.com> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [PHP-DEV] Assign array with __get From: mathieu.suen@easyflirt.com ("mathieu.suen") Etienne Kneuss wrote: > Hello, > > On Wed, Mar 17, 2010 at 3:40 PM, mathieu.suen > 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