I was working with PHP 5.2.9 with error_report=E_ALL and display_errors=On and got no error at all.
Just now I tried it under PHP 5.3.0 and got the warning. Sometimes although I declared the magic method __call(), I want to prevent it from being called outside the class. Could someone be kindly enough to tell me why it must be public? Thanks. ----- Original Message ----- From: Victor Bolshov To: Shijiang Cc: PHP internals Sent: Tuesday, August 03, 2010 7:15 PM Subject: Re: [PHP-DEV] Confusing performance of the magic method __call Shijiang, did you notice the -- Warning: The magic method __call() must have public visibility and cannot be static in Command line code on line 1 -- ??? 2010/8/3 Shijiang <shiji...@staff.sina.com.cn> Hi, In the following sample code, I expected that the magic method __call only works within the class Test. But it seems that the access control keyword private lost its efficacy when working together with the magic method __call. <?php class Test{ private function __call($name,$params){ echo $name,"\n"; echo $params[0]; } public function bar(){ $this->kakaka('afaafaf'); } } $foo=new Test; $foo->bar('sfsfss'); $foo->nothing('works'); // this also works without any errors. ?> IMHO, since the function __call is a method of a class, it should obey the visibility rules. Cheers. -- С уважением, Виктор