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 :

Ecrire le nom d'une constante et sa valeur dans un fichier


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 32
    Points : 15
    Points
    15
    Par défaut Ecrire le nom d'une constante et sa valeur dans un fichier
    Bonjour à tous,

    on a beau avoir de longues années de dev derrière soi, quand on débute un nouveau langage ... et bien on rame

    C'est mon cas avec le PHP. Voici mon problème :
    j'ai une longue liste de constantes définies dans un fichier cst.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    define("A", "tata");
    define("I", "titi");
    define("JAVA", "je connais");
    define("PHP", "je connais pas");
    define("UneAutreConstante", "une autre valeur");
    etc...
    dans un fichier migration.php j'ai un tableau associatif qui a pour clé certaines de ces variables, et pour valeur une valeur donnée, qui peut être différente de la valeur de la constante.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $tab = array(
       A=>"voici un A",
       "truc"=>"bidule", 
       UneAutreConstante=>"on met ce qu'on veut dedans",
       PHP=>JAVA
    );
    Mon but est d'ajouter une ligne à ce tableau et de réenregistrer le tout dans ce même fichier (ou bien de changer la valeur correspondant à une clé et réécrire le tout dans le même fichier).

    Je fais donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ecrire("$tab = array(\n\t");
    foreach($tab as $key=>$value)
    {
       ecrire($key."=>".value.",\n\t);
    }
    ecrire(");");
    Sauf que bien sûr, dans mon fichier de sortie, je n'ai plus les constantes en clé mais leur valeur, c'est à dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $tab = array(
       tata=>"voici un A",
       "truc"=>"bidule", 
       une autre valeur=>"on met ce qu'on veut dedans",
       je connais pas=>"je connais"
    );
    Evidamment, cela pose un problème car ce fichier est également utilisé en relation avec une base de données et j'ai impérativement besoin de conserver le nom des constantes et non d'afficher leur valeur.

    Comment puis-je afficher le nom de la constante (non interprété) au moment de l'export vers le fichier ?

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    On ne modifie pas une constante, puisque son but est justement de garder sa valeur.

    Pour ton souci tu dois trouver une autre façon de faire.

    Peut-être que ton fichier cst.php devrais contenir un tableau et a partir de là travailler dessus.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 32
    Points : 15
    Points
    15
    Par défaut
    merci MaitrePylos pour ta réponse.

    Je ne souhaite pas modifier la valeur de la constante, ma les valeurs du tableau ayant pour clé certaines constantes.

    Il me semble que modifier le fichier cst.php n'apporterait rien si je ne peux pas écrire le nom de la constante dans un fichier. Ou alors j'ai raté quelque chose ?

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    J'ai un peu de mal à te suivre.

    Pour modifier un tableau ou ajouter une ligne rien de plus simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $tab = array(
       A=>"voici un A",
       "truc"=>"bidule", 
       UneAutreConstante=>"on met ce qu'on veut dedans",
       PHP=>JAVA
    );
     
    //ajoute une ligne
    $tab['nouvelle_ligne'] = 'nouvelle ligne ajouter';
     
    //modifier même principe
    $tab['A'] = 'Voici maintenant un B';

    Après tu boucles et c'est bon .....non ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 32
    Points : 15
    Points
    15
    Par défaut
    non car le problème n'est pas d'ajouter ou modifier une valeur dans le tableau mais d'écrire ce tableau dans le fichier PHP en conservant les nom des constante comme clé et non pas en écrivant les valeurs de ces constantes comme clé.

    Je te redonne un exemple : si dans mon tableau d'ai comme clé MA_CLE comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    define("MA_CLE", "ma valeur");
    $tab[MA_CLE] = "toto";
     
    foreach($tab as $key=$value)
    {
         echo $key."=>".$value;
    }
    cela donnera :
    et non pas (comme je le souhaiterais :
    Est ce que c'est plus clair ?

  6. #6
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    J'imagine que c'est fait exprès d'écrire une clé tableau sans quote ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $tab[MA_CLE]
     
    //au lieu de
     
    $tab['MA_CLE']

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 32
    Points : 15
    Points
    15
    Par défaut
    oui tout à fait. MA_CLE est une constante qui dans mon exemple valait "ma valeur".
    Autrement dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tab[MA_CLE] eq.à $tab["ma valeur"]
    Sauf que bien sûr l'abstraction par la constante est nécessaire pour mon application.

  8. #8
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Tu pourrais faire ceci, mais moi perso je le ferais pas, trop d'invariable avec le fait d'avoir potentiellement deux fois la même valeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    <?php
     
    define("MA_CLE", "ma valeur");
    $tab[MA_CLE] = "toto";
     
    $constante = get_defined_constants(true);
    $define = $constante['user'];
     
     
    foreach ($tab as $key => $value) {
     
        $cle = array_search($key, $define);
        if ($cle) {
            echo $cle . "=>" . $value;
        } else {
            echo $key . "=>" . $value;  
     
        }
     
    }
    ?>

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 32
    Points : 15
    Points
    15
    Par défaut
    tu veux dire que si deux constantes ont la même valeur, cela peut poser problème ?

    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    define("TOTO", "azerty");
    define("TATA", "azerty");
    le array_search renverrait la première valeur trouvée et donc pas forcément le nom de la constante que j'attends ?

  10. #10
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    exact

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 32
    Points : 15
    Points
    15
    Par défaut
    ok merci, je vais m'en contenter pour le moment car c'est mieux que rien.

    Visiblement, l'autre solution consiste à faire un tableau inversé des constantes/valeurs, ce qui permet de maîtriser (en partie) le cas des valeurs multiples.

    Merci pour ton aide !

  12. #12
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    tiens j'avais pas pensé à inverser $constante['user']

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/11/2011, 11h22
  2. [XL-2000] Ecrire le nom d'une cellule dans une autre cellule
    Par Pierrotdev dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 21/08/2009, 14h52
  3. Réponses: 4
    Dernier message: 21/07/2009, 14h08
  4. Réponses: 1
    Dernier message: 18/06/2008, 23h53
  5. construire le nom d'une constante
    Par nicerico dans le forum Langage
    Réponses: 2
    Dernier message: 15/01/2007, 14h04

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