Bonjour à tous,
J'ai une petite question sur laquelle je me penche sérieusement depuis un bon moment.
Comment réalisez-vous une application web modulaire en PHP ? Dans cette question je veux parler d'une modularité de fonctions et non d'objets (sinon un simple héritage aurait suffit).
L'exemple concret sur lequel je me base est Wordpress. En effet, il dispose d'extensions qui permettent de modifier totalement le fonctionnement de celui-ci, j'aimerais faire de même avec les fonctionnalités de mon application.
Voici les pistes que j'ai explorés :
Piste 1 remplacement de fonctions
Méthode : Utiliser la fonction function_exists() de PHP pour toutes les fonctions de l'application et inclure les fonctions des extensions avant les fonctions de l'application (cela aura pour but de remplacer les fonctions de l'application).
Problèmes : Je trouve ça un peut "bourrin", pas très optimisé (les fonctions sont censés être exécutés et non testés), impossible d'avoir deux extensions qui manipulent les mêmes fonctions.
Piste 2 poser des jalons dans l'application
Méthode : Poster des include à des endroits stratégique du code (couplé à un glob("/exts/*.ext.php" par exemple pour inclure toutes les extensions données d'un répertoire à un endroit). Les fichiers inclus auront donc en portée les variables de l'application et pourront les modifier.
Problèmes : Partager la portée des variables de l'application est dangereux et non normalisé (si on change le nom d'une variable de l'application il ne sera plus possible d'y accéder. Ensuite, comment gérer les accès concurrents des extensions ? (prévoir un ordre d'inclusion etc...)
Piste : Peut être qu'il serait de bonne coutume d'utiliser des fonctions d'API programmés dans l'application ???
Piste 3 callback des fonctions intégrés (qu'en pensez vous ?)
Piste : Cette méthode je ne l'ai pas encore testé, l'idée serrait de mettre une fonction qui sera placée juste avant le return de chaque fonction de l'application afin de faire passer ça vers un tableau de nom de fonctions (remplis par les extensions qui souhaitent modifier le retour de la fonction de l'application) qui seraient appelé unes à unes par call_user_func().
Voilà, la problématique est assez complexe ainsi que les solutions à envisager pour la résoudre. Si quelqu'un a une pierre à poser à ma réflexion je suis preneur !
Bonne journée !
Cordialement.
Partager