Re: Test for edge cases with __get and property access flags
| From: | John Mertic | Date: | Fri, 05 Jun 2009 14:10:08 +0000 |
| Subject: | Re: Test for edge cases with __get and property access flags | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-44180@lists.php.net to get a copy of this message | ||
Here's that test. I don't have commit rights to that area of CVS so
someone will need to do it for me.
John Mertic
jmertic@php.net
On 6/5/09 5:58 AM, Stan Vassilev wrote:
> 3. When the caller tries to retrieve $object->foo, and foo is a private/protected
> member the caller has no access to, instead of an error, __get is called.
>
> I'm not very sure the current behavior on item 3 is the best one (maybe error should
> be thrown regardless?), but freezing on either would be better than leaving it undefined :)
>
>
> I always thought that this is the supposed behaviour. I believe I even relied on it in one
> of my projects
>
>
> Hi,
>
> If the community wants it like it is, then I'm just fine with that: as long as the test is
> committed, so that it doesn't change overnight. Any volunteers :)?
>
> Regards,
> Stan Vassilev
>
--TEST-- Test for __get() and __set() being able to access private/protected members --FILE-- <?php class Test { protected $x; private $y; function __get($name) { return $this->$name; } function __set($name, $val) { $this->$name = $val; } } $foo = new Test(); $foo->x = 'foo'; $foo->y = 'bar'; var_dump($foo->x); var_dump($foo->y); ?> ===DONE=== --EXPECT-- string(3) "foo" string(3) "bar" ===DONE=== --UEXPECT-- unicode(3) "foo" unicode(3) "bar" ===DONE===
--TEST-- Test for __get() and __set() being able to access private/protected members --FILE-- <?php class Test { protected $x; private $y; function __get($name) { return $this->$name; } function __set($name, $val) { $this->$name = $val; } } $foo = new Test(); $foo->x = 'foo'; $foo->y = 'bar'; var_dump($foo->x); var_dump($foo->y); ?> ===DONE=== --EXPECT-- string(3) "foo" string(3) "bar" ===DONE=== --UEXPECT-- unicode(3) "foo" unicode(3) "bar" ===DONE===