function_exists : #jeudiconfession n°10

function_exists : #jeudiconfession n°10

Something About Functions

function_exists est une fonction PHP permettant de connaitre si la fonction existe, est déclarée avant de l’utiliser. Les buts de ce test sont divers, on peut chercher à éviter des erreurs fatales lors de sa future utilisation – déclarer une fonction déjà déclarée ou utiliser une fonction non déclarée – , on peut chercher à savoir si elle est déclarée afin de pourvoir la déclarer nous même (fonction pluggable) ou encore chercher à savoir si une fonction est désactivée (disabled_function de php.ini).

Night Function

Il n’est pas nécessaire de toujours vérifier si une fonction existe avant de l’utiliser. Si vous développez en PHP5.5 en aoà»t 2013, alors oui, il va falloir le faire plus souvent. Si vous désirez que votre développement fonctionne sous WordPress 3.0 (ou moins ?) même chose. Mais en règle générale, on sait quelle fonction est accessible à un moment T.
Il arrive qu’on essaie d’utiliser une fonction trop tôt et on a droit à une erreur fatale Fatal error: Call to undefined function wp() mais c’est que nous sommes en plein développement donc aucun risque pour l’utilisateur final.

Function at the Junction

Il est intéressant de le faire dans quelques cas :

Overwrite

WordPress inclus un fichier nommé « pluggable.php » qui contient 38 fonctions (WP 3.6) que vous pouvez déclarer vous-même. Il est donc possible via un plugin d’en déclarer une. WordPress faisant un function_exists, il n’y a aucun risque de double déclaration ! Ce la permet plus de choses qu’un hook, ici vous réécrivez le core !

Prudence

Par prudence vous pouvez vérifier que la fonction existe. Par exemple si le plugin « WP-Truc » utilise la fonction wpt_machin(), avant de l’utiliser, vérifier qu’elle existe revient à vérifier que le plugin est actif et le fichier contenant cette fonction inclus.

Function Room

Tout ceci, c’est bien, c’est bon mangez-en. Mais on est dans un jeudiconfession là , pas dans un « fonction de la semaine », je suis donc ici pour vous parlez d’une mauvaise pratique répandue : Tester l’existence de certaines fonctions de WordPress à des moments un peu … bizarre pour des raisons qui le sont encore plus.

Je vois parfois :

Quel est le but ? C’est vraiment de vérifier si add_action existe pour faire jouer une rétro-compatibilité ? J’en doute ! En réalité c’est pour s’assurer que WordPress est bien chargé et que le fichier n’est pas appelé directement.
Dans le fond c’est bien, mais moins dans la forme. Pour faire ça utilisez cette ligne de code, à placer en tout premier dans vos fichiers qui ne doivent pas être appelé directement :

C’est en vérifiant l’existence de la constante WordPress ABSPATH qu’on sait si WordPress est chargé.

Je vois aussi parfois :

Sachant que la fonction n’est disponible que sous WordPress 3.3, c’est bien de vérifier, mais quand je vois après :

wp_get_theme() n’est disponible qu’en version 3.4, à quoi bon tester une fonction 3.3 si c’est pour laisser passer une 3.4 !

Form Function

Pourquoi on voit ça alors !? Et bien il y a beaucoup de copier/coller mais il manque l’étape /penser/ entre 2. Pourquoi vérifier ? Pourquoi laisser ça ? Pourquoi ne pas le faire ailleurs ? Qui se pose la question ? Vous devriez vous la poser avant de coller le tutoriel pompé à droite et à gauche. Le code du codex aussi est à vérifier, finalement le codex est écrit par tout le monde et tout le monde fait des erreurs non ?

J’ai pris l’exemple de function_exists mais cela fonctionne aussi pour d’autres fonctions, d’autres codes finalement. J’aurais pris le temps de vous donner des exemples d’utilisation 😉

Et vous, utilisiez-vou function_exists ?

Vous aimez ? Partagez !


Réagir à cet article

220 caractères maximum