作成日:2006/05/10
1K.4 関数の間接呼び出し
1K.4.1 可変関数
PHPには可変関数と呼ばれるものがあります。 可変関数は、コールバック、イベントハンドラ、関数テーブルなどの実装を容易にします。
尚、PHPには unset(), isset(), empty(), include(), echo(), print() のように一見関数風なものがありますが、 これらは言語構造として組み込まれているので、可変変数として使う事はできません。
PHPは可変関数だけでなく、(オブジェクトの場合)可変メソッドも使用する事ができます。
- 構文:可変関数
- $変数名( 引数リスト )
- $変数名 の値が関数名になります。
- $変数名 で関数を間接参照しています。可変変数($$変数名)との類似性に注目して下さい。
用例:
function hello($name1,$name2){ echo "Hello $name1 $name2.\n"; }
$func = 'hello';
$func("sun", "light"); // 'Hello sun light.'を表示
1K.4.2 関数による関数コール
- 構文:関数による関数コール
- mixed call_user_func ( callback function [, mixed parameter [, mixed ...]] ) mixed call_user_func_array ( callback function [, array param_arr] )
- 関数を使って関数を呼び出す事ができます。
- 関数の引数を羅列する場合は call_user_func() を、配列で渡す場合は call_user_func_array() を使います。
用例:
function hello($name1,$name2){ echo "Hello $name1 $name2.\n"; }
call_user_func( "hello", "sun", "light"); // 'Hello sun light.'を表示
call_user_func_array( "hello", array("sun", "light") ); // 'Hello sun light.'を表示
1K.4.3 匿名関数
create_function()関数を使って匿名関数を作る事ができます。 匿名関数は1回しか使用しない一時的なコールバック関数などに使用されます。
- 構文:匿名関数
- create_function ( string args, string code )
- create_function() はユニークな名前を返します。
- args には、引数並びを文字列で指定し、code は関数本体のコードを文字列で記述します。
※ これらの引数は共に(変数展開を抑止するために)シングルクオートで括った文字列を使用する事が推奨されます。
用例:
$new_func = create_function('$name1,$name2','echo "Hello $name1 $name2.\n";');
$new_func("sun", "light"); // 可変関数としてコール
call_user_func( $new_func, "sun", "light"); // call_user_func()関数を使ってコール
