ユーザー関数を内部関数からコールするには、
call_user_function()
関数を 使用する必要があります。
call_user_function()
は成功時に SUCCESS、 関数を見つけられなかった場合に FAILURE を返します。
返り値を確認する必要があります! SUCCESS が返された場合、 retval pval
自体(または関数からの返り値として それを返す)を破棄する責任があります。 FAILURE が返された場合、retval
の値は未定義であり、参照することは できません。
ユーザー関数をコールする全ての内部関数は、再入可能(reentrant) である
必要があります
。 特に、このことは、グローバルまたは静的変数を使用するべきでは ないということを意味します。
call_user_function()
は次の 6個の引数をとります。
これは、関数がコールされるオブジェクトへのポインタです。
グローバル関数がコールされた場合、このポインタは、
NULL
で ある必要があります。
NULL
でない (すなわち、オブジェクトを指している)場合、 function_table
引数は無視され、かわりにオブジェクトのハッシュから とられます。
オブジェクトは、コールした関数により修正可能な場合があります。 (関数は、$this
によりアクセスすることが可能です。) 何らかの理由で、こうしたことを避けたい場合、
オブジェクトのコピーを代わりに送付します。
コールする関数の名前。 function_name.str.val および
function_name.str.len に適当な 値を設定した IS_STRING 型の pval
である必要があります。 function_name は、call_user_function() により修正されます。
この時、function_name は、小文字に変換されます。
大文字・小文字を保存する必要がある場合、関数名のコピーを代わりに 送って送ってください。