web-dev-qa-db-fra.com

Pourquoi les filtres/actions nécessitent-ils un nombre d'arguments?

Je regardais simplement plugin.php essayer de répondre à la question ci-dessus et je ne pouvais pas résoudre le problème. Le code qui appelle les filtres est le suivant:

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 );

Si (int) $the_['accepted_args'] n'y était pas, il transmettrait simplement tout ce qui est disponible à la fonction cible sans aucun impact négatif pour les fonctions avec des paramètres moins formels.

2
Lex R
  1. En raison de la compatibilité ascendante.

    Vous pouvez utiliser le même rappel pour plusieurs filtres. À l'intérieur de ce rappel, vous devez utiliser current_filter() pour déterminer le contexte. Mais certains plugins utilisent le nombre d'arguments passés à la place. Changer cela briserait ces plugins.

    C’est pourquoi vous devez toujours utiliser l’API (ici: current_filter()) et non une construction inventée.

  2. De plus, PHP émettra un avertissement lorsque vous transmettez plus de paramètres à une fonction native que cette fonction ne l’attend.

See Ticket # 14671 Obsolète l'argument "arguments acceptés" dans add_filter () et add_action ()

4
fuxia