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