web-dev-qa-db-ja.com

フィルタ/アクションに引数カウントが必要なのはなぜですか

私はちょうど上記の質問に答えようとしているplugin.phpを見ていました、そして、私はそれを解決することができませんでした。フィルタを呼び出す実際のコードはこれです。

do {
    foreach( (array) current($wp_filter[$tag]) as $the_ )
        if ( !is_null($the_['function']) ){
            $args[1] = $value;
            $value = call_user_func_array($the_['function'], array_slice($args, 1, (int) $the_['accepted_args']));
        }

} while ( next($wp_filter[$tag]) !== false );

もし(int) $the_['accepted_args']が存在しなければ、利用可能なすべてのものを単にターゲット関数に渡します 悪影響を与えずに /形式的でないパラメータを持つ関数の場合。

2
Lex R
  1. 後方互換性のためです。

    複数のフィルタに同じコールバックを使用できます。そのコールバックの中では、コンテキストを決定するためにcurrent_filter()を使うべきです。しかしいくつかのプラグインは代わりに渡された引数の数を使います。これを変更すると、これらのプラグインが壊れます。

    だからこそ、あなたは常にAPI(ここではcurrent_filter())を使うべきで、構成されたものではありません。

  2. また、PHPは、ネイティブ関数に予期しているよりも多くのパラメータを渡すと警告を出します。

チケット#14671を参照してください。add_filter()およびadd_action()の引数 "accept args"を非推奨にします

4
fuxia