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