Avec PHP nous pouvons appeler des fonctions basées sur la valeur d'une variable. Si le nom d'une variable est suivi de parenthèses, PHP recherchera si une fonction de même nom que la variable existe. Si c'est le cas la fonction sera exécutée. SI aucune fonction n'est trouvée une erreur sera générée. Nous pouvons utiliser la fonction standard function_exists() pour savoir si une fonction est définie ou non.

Considérons l'exemple suivant :

switch ($quoiFaire) {
case 'ajouter' :
  ajouter();
  break;
case 'supprimer' :
  supprimer();
  break;
case 'modifier' :
  modifier();
  break;
default :
  interdit();
}

On trouve très souvent ce type de décision dans les pages d'index de site, ou dans le modèle de conception MVC (Model-View-Controler).

Nous pouvons utiliser une fonction variable à la place de ce code et le remplacer tout simplement par $quoiFaire();.
Si la variable $quoiFaire contient 'ajouter', la fonction ajouter() sera invoquée, si la variable contient 'supprimer', la fonction supprimer() sera invoquée, si la variable contient 'modifier', la fonction modifier() sera invoquée.

Nous avons un problème si $quoiFaire contient autre chose que 'ajouter', 'supprimer' ou 'modifier', car nous allons appeler une fonction dont le nom peut être n'importe quoi. Mais PHP nous donne la solution avec la fonction function_exists() :

if (function_exists($quoiFaire) {
  $quoiFaire();
} else {
  interdit();
}

Nous pouvons aussi utiliser l'opérateur ternaire de test :

function_exists($quoiFaire) ? $quoiFaire() : interdit();