(ページの作成: ==マジックメソッド__call== ===互換性のない変更点=== PHP5.2.9以降で、__callメソッドの挙動に変更がありました。 下記はPHP5.2.XとPHP5.3.X...)
 
(マジックメソッド__call)
44行目: 44行目:
 
     PHP Fatal error:  Call to private method TestClass::privateMethod() from context '' in a.php on line 19
 
     PHP Fatal error:  Call to private method TestClass::privateMethod() from context '' in a.php on line 19
  
===PHP5.3.3で実行===
+
===PHP5.2.11で実行===
  
 
     called private method!
 
     called private method!
  
 
* 本当は5.2.9で実験したかったのですがとりあえず。。。
 
* 本当は5.2.9で実験したかったのですがとりあえず。。。

2010年10月19日 (火) 11:55時点における版

マジックメソッド__call

互換性のない変更点

PHP5.2.9以降で、__callメソッドの挙動に変更がありました。

下記はPHP5.2.XとPHP5.3.Xについての記述ですが、この点についてはPHP5.2.8とPHP5.2.9についても同様の変更が加えられたということですね。

PHP5.2.XからPHP5.3.Xへの以降→下位互換性のない変更点

   マジックメソッド __call  は、private や protected のメソッドに対するアクセスでも呼び出されるようになりました。 


ChangeLogでは下記が該当箇所ですね。

   Version 5.2.9
   26-February-2009
   
   * Changed __call() to be invoked on private/protected method access, similar to properties and __get(). (Andrei)

サンプルコード

   <?php
   class TestClass
   {
       public function __call($name, $arguments)
       {
           if ($name == 'privateMethod') {
               $this->privateMethod();
           }
       }
       
       private function privateMethod()
       {
           echo "called private method!\n";
       }
   }
   
   $test_class = new TestClass();
   $test_class->privateMethod();

PHP5.2.8で実行

   PHP Fatal error:  Call to private method TestClass::privateMethod() from context  in a.php on line 19

PHP5.2.11で実行

   called private method!
  • 本当は5.2.9で実験したかったのですがとりあえず。。。

facebook slideshare rubygems github qiita