charger_fonction

Cette fonction charger_fonction() permet de récupérer le nom d’une fonction surchargeable de SPIP. Lorsqu’une fonction interne suffixée de _dist() est surchargée (en la recréant sans ce suffixe), ou lorsqu’on surcharge l’ensemble d’un fichier contenant une fonction de la sorte, il faut pouvoir récupérer la bonne fonction au moment de son exécution.

C’est cela que fait charger_fonction(). Elle retourne le nom de la fonction à exécuter.

$mafonction = charger_fonction('mafonction','repertoire');
$mafonction();

Principe de recherche

La fonction se comporte comme suit :

  • si la fonction repertoire_mafonction a déjà été déclarée, elle est retournée.
  • sinon repertoire_mafonction_dist,
  • sinon tente de charger un fichier repertoire/mafonction.php puis
  • retourne repertoire_mafonction si existe,
  • sinon repertoire_mafonction_dist,
  • sinon renvoie false.

Argument de la forme dossier/fichier

L’argument repertoire peut être un sous-dossier : inc/utils auquel cas c’est le fichier inc/utils/mafonction.php qui est chargé s’il existe, comme expliqué ci dessus.

Mais si ce fichier n’existe pas, alors, charger_fonction charge le fichier inc/utils.php s’il existe et renvoie la fonction inc_utils_mafonction_dist ou inc_utils_mafonction définie dans ce fichier.
Ainsi, il est possible de définir plusieurs fonctions dans ce même fichier et de les appeler par charger_fonction.

Exemple

Envoyer un mail :

$envoyer_mail = charger_fonction('envoyer_mail', 'inc');
$envoyer_mail($email, $sujet, $corps);

Plusieurs fonctions dans un même fichier

Soit le fichier inc/patates.php définissant 2 fonctions :

function inc_patates_eplucher($nb){
  return $nb.' patates épluchées !';
}
function inc_patates_cuire($nb){
  return $nb.'  patates cuites !';
}

On peut ensuite charger les définitions des différentes fonctions inclues :

  $eplucher = charger_fonction('eplucher', 'inc/patates');
  $eplucher(5);
 
  $cuire = charger_fonction('cuire', 'inc/patates');
  $cuire(2);

Auteur Matthieu Marcillaud Publié le : Mis à jour : 16/02/19

Traductions : English, français, Nederlands