PHP5を試してみる - 定義されていないメソッド
サンプルは、EXPERIENCEで実際に確認できるようにしてますので、気になる方は見てみてください。
PHP4では定義されていないメソッドを呼んだ場合、当然「Call to undefined method ...」となっていましたが、PHP5からは__callメソッドを用意しておくと、代わりに呼び出されます。__callメソッドの引数は、「メソッド名」「メソッドの引数」の2つです。
●07.call.php5
<?php
class Foo
{
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らしい」実装になりそうです。
|