次のようなコードを使用するライブラリがいくつかあります。
$args = array_merge(array(&$target, $context), $args);
$result = call_user_func_array($callback, $args);
どちらの場合もコードは異なりますが、私が示したコードは基本的に行われているものです。この $callback
関数は次の署名を使用します。
function callback(&$target, $context);
どちらのライブラリもそれを文書化しており、サードパーティのコード(プラグインまたは拡張機能と呼びます)はその関数シグネチャを採用しています。つまり、どの拡張機能もコールバックをたとえばのように定義していません function my_extension_loader_callback($target, $context)
。
私を混乱させるのは、call_user_func_array()のドキュメントの次の文です。
PHP 5.4より前では、param_arr内の参照変数は、関数がそれぞれのパラメーターが参照によって渡されることを期待しているかどうかに関係なく、参照によって関数に渡されます。この形式の参照による呼び出し時間パスは非推奨の通知を発行しませんが、それでも非推奨であり、PHP5.4で削除されました。さらに、これは、関数のシグネチャが尊重される内部関数には適用されません。関数が参照によってパラメーターを予期しているときに値を渡すと、警告が発生し、が
call_user_func()
返されFALSE
ます。
特に、強調表示された文は、PHPコードで定義された関数に対して行われていないことを示唆しているようです。
call_user_func_array()
このように使用することはPHP5.4で機能しますか?