Re: __call() magic method

From: Date: Sun, 31 Aug 2008 01:15:47 +0000
Subject: Re: __call() magic method
References: 1 2 3 4 5 6  Groups: php.internals 
Request: Send a blank email to internals+get-40179@lists.php.net to get a copy of this message
Hi, __get() makes more sense to me, and maybe was where | got the ideia because | never used __call() before but i add used __get() :( Maybe the php folks change its behavior in future... It's worthy of a bug report ( I ask because i'm not very involved in php community ) Thanks, On Sun, Aug 31, 2008 at 1:35 AM, Mike Lively <m@digitalsandwich.com> wrote: > Antony, > I don't at all disagree about the inappropriateness of this not triggering > an error but I did want to point out that this behavior is not consistent > with how __get() works. It seems like they should all behave similarly when > dealing with overriding methods or properties of different access levels. > > +++ Attempting to access a private property > mikel@mikel-desktop:~$ php -r 'class A { private $a; } $a = new A; $a->a;' > Fatal error: Cannot access private property A::$a in Command line code on > line 1 > > +++ Attempting to access a private property when __get() is defined > mikel@mikel-desktop:~$ php -r 'class A { private $a; public function > __get($var) { echo $var, "\n"; } } $a = new A; $a->a;' > a > > +++ Attempting to access a private method > mikel@mikel-desktop:~$ php -r 'class A { private function a() {} } $a = new > A; $a->a();' > Fatal error: Call to private A::a() from invalid context in Command line > code on line 1 > > ++ Attempting to access a private method when __call is defined > mikel@mikel-desktop:~$ php -r 'class A { private function a() {} public > function __call($method, $parms) { echo $method, "\n"; } } $a = new A; > $a->a();' > > Fatal error: Call to private A::a() from invalid context in Command line > code on line 1 > > On Sat, Aug 30, 2008 at 4:04 PM, Antony Dovgal <tony@daylessday.org> wrote: >> >> On 31.08.2008 02:50, Diogo Neves wrote: >>> >>> Exactly... >>> >>> Is that normal workings or more like a bugie one? >> >> Definitely not a bug. >> >> I believe the reason is that if you enable __call() in this case, you'd >> have different behavior depending on the calling scope, i.e. complete mess. >> Also there would be no way to know you're calling a method you're not >> supposed to call (unless you trigger an error yourself). >> >> -- >> Wbr, Antony Dovgal >> >> -- >> PHP Internals - PHP Runtime Development Mailing List >> To unsubscribe, visit: http://www.php.net/unsub.php >> > > -- Thanks for your attention, Diogo Neves Web Developer @ SAPO.pt by PrimeIT.pt

« previous php.internals (#40179) next »