Surcharger des fonctions

  pour re-définir un traitement php différent du standard

D’une façon analogue à la surcharge des squelettes, certaines fonctions du code php peuvent être redéfinies dans les fichiers mes_fonctions ; mais cela suppose deux conditions, qui réservent plutôt ces possibilités aux développeurs de plugins (seule exception courante : la redéfinition d’autorisations à votre sauce..) :
- le nom de la fonction à surcharger doit se terminer par _dist,
la possibilité de surcharge de fonction a donc due être prévue dans SPIP,
_et la fonction redefinie doit être nommée sans le suffixe _dist
- pour les programmeurs, il faut utiliser une syntaxe particulière pour obtenir le bon appel de fonctions...

Article publié le 1er avril 2014, et actualisé en février 2015

 
 
 
 
 
 
 
 
 
 

Rappelons d’abord qu’en programmation, la surcharge consiste à modifier le comportement standard (la fonction d’origine) par une autre version, donnant un fonctionnement adapté (souvent dans un cas particulier : surcharge de spécialisation).

 La syntaxe de principe

Dans une implémentation SPIP, la surcharge de fonction consiste donc de redéfinir une fonction existant génériquement dans le core de SPIP, et prévue pour ! avec une nouvelle définition de fonction php, ayant exactement les mêmes paramètres, dans le même ordre ; seule différence, le nom de la fonction à surcharger était définie dans le spip avec un suffixe _dist, alors que la nouvelle version (que vous écrirez probablement dans un fichier mes_fonctions) portera le même nom sans suffixe (ceci pour éviter un conflit de noms dans l’espace de nommage php).

 Comment SPIP gère-t-il l’appel ?

En programmation php, une fonction est "appelée", c’est-à-dire que son code est exécuté classiquement lorsque le programme rencontre le nom de fonction dans une instruction...
Et vous me ferez remarquer que les deux fonctions en cause, la fonction générique et la fonction de surcharge n’ont pas exactement le même non : oui, et heureusement (sinon conflit !).

Mais les développeurs de SPIP ont préparé un mécanisme général, tirant parti du fonctionnement interne de l’appel par un "pointeur" sur l’adresse réelle du code de la fonction : c’est le rôle de la fonction SPIP nommée justement charger_fonction(), d’opérer cette ’magie [1] !

 Où placer le code d’une fonction de surcharge

En règle générale, les fonctions de traitement php sont utilisées pour l’interprétation des squelettes, donc lors de la phase de pré-compilation...
SPIP prévoit un fichier source mes_fonctions.php que le Webmestre pourra créer et remplir, pour contenir toutes le fonctions codées pour compléter le traitement des squelettes : c’est en général l’endroit privilégier pour ajouter de telles fonctions.
Ce fichier sera chargé uniformément pour toutes les opérations d’interpretations de squelettes ; mais vous pouvez jouer plus finement, si votre fonction ne doit servir qu’a un seul squelette (disons ma_page_a_moi.html ), en créant un fichier source .php associé de meme nom et suffixé par _fonctions (ici ce serait ma_page_a_moi_fonctions.php).
Cela vous permettrait même d’avoir plusieurs définitions alternatives, dans plusieurs fichiers utilisés dans plusieurs squelettes...mais cela devient un peu extrême....


Merci de nous signaler les coquilles, imprécisions ou erreurs qui figureraient dans cette page.

[1Principe repris en programmation Objet !


Liens A2A visibles seulement pour les inscrits.
Liens visibles seulement pour les inscrits.

Article publié le 1er avril 2014, et actualisé en février 2015 .

Répondre à cet article