function Func($arg_1, $arg_2, /* ..., */ $arg_n)
{
echo "Example function.\n";
return $retval;
}
PHP: ユーザー定義関数 - Manual
PHP: ルール - Manual関数名は、PHP の他のラベルと同じ規則に従います。関数名として有効な 形式は、まず文字かアンダースコアで始まり、その後に任意の数の文字・ 数字・あるいはアンダースコアが続くものです。正規表現で表すと、 [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]* となります。
PHP: ユーザー定義関数 - Manual
関数の定義でFatal error: Cannot redeclare xx()とエラーとなったときには、すでに同名の関数が定義されています。その関数名に心当たりがあるならば、素直に名前を変更します。思い当たるふしがないならば、include()しているファイルを調べてみます。
// 関数の定義 $Func = function( $a ) { echo $a; }; // <- セミコロンが必要 // 関数の呼び出し $Func( 'ABC' );
string create_function ( string $args, string $code )PHP: create_function - Manual
たとえばset_error_handler()のハンドラを無名関数にするならば、
set_error_handler( create_function( '$errno, $errstr', 'echo $errstr; return TRUE;' ) );
のようにします。
関数の名前を文字列で渡すことで、その文字列から関数を呼び出せます。
function Callback( $a )
{
echo $a;
}
function Func( $func, $val )
{
$func( $val );
// Callback( 'ABC' )の呼び出し
}
Func( 'Callback', 'ABC' );
再帰的に関数を呼び出すことが可能ですが、その深さには制限があります。ドキュメントには、
PHP では、関数を再帰的にコールすることが可能です。ただし、100 から 200 を超えるような再帰呼び出しは避けてください。そんなことをすると、 スタックが破壊され、スクリプトが異常終了してしまいます。
PHP: ユーザー定義関数 - Manual
とあります。試しに、
function Func() { Func(); } Func();
としてループさせると、Fatal error: Maximum function nesting level of '100' reached, aborting!として、100回でスクリプトが停止します。
XDebugがインストールされているならば、再帰の深さを制御できます。設定オプションのxdebug.max_nesting_levelの値がそれです。たとえば、
ini_set( 'xdebug.max_nesting_level', 500 );
として再度実行すると、Maximum function nesting level of '500' reached, aborting!となり、設定した深さまで処理を確認できます。