Do You PHP?    
Search Engine Optimization  php5 powerd  Valid XHTML 1.0!  Valid CSS!  このサイトのはてなブックマーク数 



last updated
2004/10/09

counter hits
since 1999/11/06


PHP5を試してみる - 定義されていないメソッド

memoサンプルは、EXPERIENCEで実際に確認できるようにしてますので、気になる方は見てみてください。

PHP4では定義されていないメソッドを呼んだ場合、当然「Call to undefined method ...」となっていましたが、PHP5からは__callメソッドを用意しておくと、代わりに呼び出されます。__callメソッドの引数は、「メソッド名」「メソッドの引数」の2つです。

●07.call.php5

<?php
class Foo
{
    /**
     * 宣言されていないメソッドの場合にコールされる
     *  ・第1パラメータはメソッド名
     *  ・第2パラメータは引数の配列
     */
    function __call($m, $b)
    {
        echo 'メソッド "' . $m . '" が以下の引数を付けてコールされました <pre>';
        echo var_dump($b);
        echo '</pre><hr>';
    }
}

$foo = new Foo();
$foo->test();
$foo->test('a', 'b', array('c', 'd'), false);
$foo->test($foo);
echo 'finished';
?>
<hr>
<?php
    show_source($_SERVER["SCRIPT_FILENAME"]);
?>

●実行結果
メソッド "test" が以下の引数を付けてコールされました
array(0) {
}




メソッド "test" が以下の引数を付けてコールされました
array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  array(2) {
    [0]=>
    string(1) "c"
    [1]=>
    string(1) "d"
  }
  [3]=>
  bool(false)
}




メソッド "test" が以下の引数を付けてコールされました
array(1) {
  [0]=>
  object(Foo)#1 (0) {
  }
}




finished

実際の使い道ですが、

  • Proxyのような他のオブジェクトの呼び出し(@ITにある小山さんの記事を参照)
  • デバッグ目的で、未定義の場合にメッセージを表示させる

と思われます。前者などはJavaと異なり、「PHPらしい」実装になりそうです。



About This Site |  Privacy Policy |  Contact
Copyright © 1999 - 2004 by Hideyuki SHIMOOKA all rights reserved.