IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

appel d'une fonction ou d'une autre en fonction d'un paramétrage


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut appel d'une fonction ou d'une autre en fonction d'un paramétrage
    Bonjour,

    Je suis en train de développer une application qui doit générer des numéros de dossiers.
    Les numéros dossiers peuvent avoir plusieurs formats :
    format 1 : commence par un D, codé sur 5 digits, incrémentale de 1 en 1
    format 2 : commence par un 10, codé sur 3 digit, incrémental de 1 en 1
    format 3 : commence par l'année en cours sur 2 caractères, codé sur 3 digit, incrémental de 1 en 1

    etc etc

    en fait chaque format est propre aux clients de mon application, chaque client étant indépendant.

    La problématique est la suivante : Lorsque j'ai un nouveau client qui m'impose un nouveau format de numéro de dossier, je ne voudrais pas du tout toucher aux routines déjà présentes.

    La solution qui m'est venu tout de suite en tête est la suivante :

    Dans la base, associer à chaque client un numéro de format et dans le code faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function format1(numero){ #code de génération du format 1 }
    function format2(numero){ #code de génération du format 2 }
    function format3(numero){ #code de génération du format 3 }
     
    // code général de l'application : 
     
    if (format_client == 1)
        numero_dossier = format1(numero);
    if (format_client == 2)
        numero_dossier = format2(numero);
    if (format_client == 3)
        numero_dossier = format3(numero);
    Le problème avec cette façon de faire est que si j'ajoute un format, je suis obligé d'ajouter une itération if(format_client) == X.

    Serait-il possible de stocker dans la base de données le nom de la fonction à appeler et, dans le code commun, appeler cette fonction variable sachant que je dois lui passer des variables ("numero" dans mon exemple) ?
    Y a-t-il une autre façon de faire ?

    Merci de vos idées !

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2015
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2015
    Messages : 107
    Points : 139
    Points
    139
    Par défaut
    Bonjour,

    Déjà, plutôt que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (format_client == 1)
        numero_dossier = format1(numero);
    if (format_client == 2)
        numero_dossier = format2(numero);
    if (format_client == 3)
        numero_dossier = format3(numero);
    tu peux utiliser un switch :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    switch(numero) {
        case 1 : numero_dossier = format1(numero);
        break;
        case 2 : numero_dossier = format2(numero);
        break;
        case 3 : numero_dossier = format3(numero);
        break;
    }
    et dans la continuité de ça, pour ma part, je pense que j'aurais faire une seule fonction de génération qui va justement switch en fonction de ton besoin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function genere_code(type_client) {
      switch(numero) {
        case 1 : /*$numero_dossier =  génération format 1;*/
        break;
        case 2 : /*$numero_dossier =  génération format 1;*/
        break;
        case 3 : /*$numero_dossier =  génération format 1;*/
        break;
      }
    return $numero_dossier
    }
    et dans ton code principale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $numero_dossier = genere_code($format_client);
    Voir aussi les cours et tutoriels pour apprendre la programmation PHP : http://php.developpez.com/cours/
    Darkauron

  3. #3
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    Merci de ton retour.

    Dans ton exemple, si je dois ajouter une fonction parce que j'ai un nouveau format de numéro cela signifie que je dois modifier le code de génération des formats. Qui dit modification dit bug potentiel. Donc l'ajout d'une nouvelle fonction aurait potentiellement un impact sur les autres clients déjà en place et non concernés par la fonction que j'ajoute. Ce que je souhaite éviter !

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2015
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2015
    Messages : 107
    Points : 139
    Points
    139
    Par défaut
    A partir du moment où tu veux faire évoluer ton système, il y a risque, bien évidemment.

    Par contre, pour ne pas impacter tes clients, tu devrais avoir (et j'espère, tu as) un environnement de dev, et donc, la possibilité de tester avant de mettre en production pour éviter les erreurs "basiques" (syntaxe, etc...)

    Je ne pense pas qu'il existe une solution pour faire évoluer un système avec un risque 0.
    Darkauron

Discussions similaires

  1. Réponses: 13
    Dernier message: 09/03/2013, 20h12
  2. Réponses: 5
    Dernier message: 22/05/2008, 15h42
  3. Copier une table Access d'une base de données à une autre
    Par Marie S. dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 23/05/2007, 13h09
  4. fonction membre d'une classe amie d'une autre classe
    Par olive_le_malin dans le forum C++
    Réponses: 3
    Dernier message: 16/11/2006, 10h39
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 22h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo