PHPで引数にコールバック関数を渡すメソッドや関数って沢山あると思います。
それらと同じような事を自分でつくるとしたらどうするのかなぁーとか考えてました。
どうやらPHPにはis_callableという関数があるらしくcall_user_funcと一緒に組み合わせて使えば簡単に作成することができます。
1
2
3
4
5
6
7
8
|
<?php
function callbackArgTest( $str, $callback ) {
$str .= ", write date:".date('Y/m/d H:i:s');
if ( is_callable( $callback ) ) {
return call_user_func( $callback, $str );
}
return false;
}
|
という感じに関数を作成すればいいかと思います。
んでもって以下のように書いて実行すれば動きまする。
1
2
3
4
5
6
7
8
9
10
11
|
<?php
function output($str) {
echo "```
\n";
echo $str."\n";
echo "```\n";
}
$str = "今日はとってもいい天気です";
callbackArgTest( $str, 'output' );
|
実行結果
1
|
今日はとってもいい天気です, write date:2012/01/14 14:49:56
|
ちなみにPHP5.3以降ならクロージャが使えるのでこんな風にできます。
1
2
3
4
5
6
|
callbackArgTest( $str, function( $str ){
echo "```
\n";
echo $str."\n";
echo "```\n";
});
|
クラスとかの場合どうするの?って思いましたが、普通になかでcall_user_funcしているだけなので以下のように書けばおkです。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class testObj
{
public function output( $str ) {
echo "```
\n";
echo $str."\n";
echo "```\n";
}
}
$obj = new testObj();
callbackArgTest( $str, array( $obj, 'output' ) );
|