Pourquoi utiliser if function_exists?

30

J'ai remarqué que beaucoup de développeurs de thèmes WordPress utiliseraient cela dans functions.php

if (function_exists('register_nav_menus')) {
    register_nav_menus (array('primary' => 'Header Navigation'));
}

Pour moi, j'utilise toujours add_action pour chaque fonction que j'utilise dans functions.php

Ainsi, ce qui précède serait écrit comme suit:

add_action('init', 'my_register_nav_menus');

function my_register_nav_menus() {
    register_nav_menus (array('primary' => 'Header Navigation'));
}

J'ai deux questions:

  1. Pourquoi utiliser l'instruction if dans la première méthode?

  2. Laquelle est la bonne façon?

Greeso
la source

Réponses:

35

Vérifier pour voir s'il existe des fonctions WordPress intégrées avant de les appeler est pour une compatibilité descendante qui à mon humble avis n'est pas nécessaire.

Donc, si vous voyez que if ( function_exists( 'register_nav_menus' ) )l'auteur du thème prend en charge les versions antérieures à 3.0.

Vous voyez encore parfois if ( function_exists( 'dynamic_sidebar' ) )pourquoi? Je ne pourrais pas vous le dire car dynamic_sidebar a été introduit en 2.2.

Une autre raison de l'utiliser est de rendre votre thème ou plugin enfichable. Une fonction enfichable est une fonction qui peut être remplacée dans un thème enfant ou un autre plugin.

Cela se fait sur la définition et non sur l'appel et vous utilisez le! pour vous assurer qu'il n'existe pas déjà avant de le définir.

if ( ! function_exists( 'my_awesome_function' ) ) {
/**
 * My Awesome function is awesome
 *
 * @param array $args
 * @return array
 */
function my_awesome_function( $args ) {
  //function stuff
  return array();
  }
}

Lorsque cela est fait, un thème enfant ou un autre plugin peut remplacer cette fonction par le sien.

Chris_O
la source
9

La function_existsfonction n'est pas une autre façon de charger la fonction comme la add_actionsienne pour vérifier votre code pour voir qu'il n'y a pas d'autre fonction avec le même nom, donc elle ne cassera pas votre code. De php.net:

Vérifie la liste des fonctions définies, à la fois intégrées (internes) et définies par l'utilisateur, pour nom_fonction.

Si vous avez deux fois la même fonction dans votre code, elle se cassera, c'est pourquoi vous préfixez votre fonction avec autre chose que wp_.

En savoir plus: http://php.net/manual/en/function.function-exists.php

Pontus Abrahamsson
la source
0

vous pouvez utiliser http://php.net/function_exists

if(function_exists('my_function')){
   // my_function is defined
}

OU si vous souhaitez voir toutes les fonctions disponibles, vous pouvez donc également imprimer tout,

echo "<pre>"; print_r(get_defined_functions());

imprimer sur la page et vous pouvez rechercher cette fonction si elle ne figure pas sur la liste signifie qu'elle n'est pas disponible à utiliser.

vous devrez peut-être activer l'extension pour une bibliothèque particulière.

manish1706
la source
0

php.net définit cela comme

(PHP 4, PHP 5, PHP 7) function_exists - Retourne TRUE si la fonction donnée a été définie

Je dois être d'accord avec Michelle en ce sens que vous [sh] ould n'utilisez la vérification que pour quelque chose de similaire à la vérification de transtypage; vous chercherez donc si une fonction existe (sur cette page ou à partir de tout ce qui est appelé sur cette référence de page / fichier), alors vous saurez s'il est sûr d'exécuter une autre fonction ou d'analyser éventuellement un modèle HTML.

Comme quelqu'un l'a mentionné, il est couramment utilisé pour vérifier si votre fichier / thème (à l'aide de WordPress) est capable d'exécuter votre demande. Je l'ai utilisé pour vérifier si un thème a une partie de modèle spécifique.

if ( function_exists( 'register_sidebar' ) ) { get_sidebar(); }

tradesouthwest
la source
0

function_exists doit être utilisé après le nom de la fonction dans un thème pas avant.

add_action( 'loop_start', 'add_slider' );

function add_slider() {

if ( function_exists( 'soliloquy' ) ) { 

soliloquy( 'slider', 'slug' ); 

    }

}

Ceci vérifie que le plugin est actif avant de sortir une fonction et / ou un balisage sinon vous pourriez obtenir une erreur comme l'appel à une fonction non définie.

Michelle
la source