p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Invité régulier
    Inscrit en
    septembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 32
    Points : 5
    Points
    5

    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
    Responsable Livres

    Avatar de MaitrePylos
    Homme Profil pro
    DBA & Dev PHP
    Inscrit en
    juin 2005
    Messages
    4 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA & Dev PHP
    Secteur : Service public

    Informations forums :
    Inscription : juin 2005
    Messages : 4 011
    Points : 9 144
    Points
    9 144

    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
    Invité régulier
    Inscrit en
    septembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 32
    Points : 5
    Points
    5

    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
    Responsable Livres

    Avatar de MaitrePylos
    Homme Profil pro
    DBA & Dev PHP
    Inscrit en
    juin 2005
    Messages
    4 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA & Dev PHP
    Secteur : Service public

    Informations forums :
    Inscription : juin 2005
    Messages : 4 011
    Points : 9 144
    Points
    9 144

    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
    Invité régulier
    Inscrit en
    septembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 32
    Points : 5
    Points
    5

    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
    Responsable Livres

    Avatar de MaitrePylos
    Homme Profil pro
    DBA & Dev PHP
    Inscrit en
    juin 2005
    Messages
    4 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA & Dev PHP
    Secteur : Service public

    Informations forums :
    Inscription : juin 2005
    Messages : 4 011
    Points : 9 144
    Points
    9 144

    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
    Invité régulier
    Inscrit en
    septembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 32
    Points : 5
    Points
    5

    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
    Responsable Livres

    Avatar de MaitrePylos
    Homme Profil pro
    DBA & Dev PHP
    Inscrit en
    juin 2005
    Messages
    4 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA & Dev PHP
    Secteur : Service public

    Informations forums :
    Inscription : juin 2005
    Messages : 4 011
    Points : 9 144
    Points
    9 144

    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
    Invité régulier
    Inscrit en
    septembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 32
    Points : 5
    Points
    5

    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
    Responsable Livres

    Avatar de MaitrePylos
    Homme Profil pro
    DBA & Dev PHP
    Inscrit en
    juin 2005
    Messages
    4 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA & Dev PHP
    Secteur : Service public

    Informations forums :
    Inscription : juin 2005
    Messages : 4 011
    Points : 9 144
    Points
    9 144

    Par défaut

    exact

  11. #11
    Invité régulier
    Inscrit en
    septembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 32
    Points : 5
    Points
    5

    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
    Responsable Livres

    Avatar de MaitrePylos
    Homme Profil pro
    DBA & Dev PHP
    Inscrit en
    juin 2005
    Messages
    4 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA & Dev PHP
    Secteur : Service public

    Informations forums :
    Inscription : juin 2005
    Messages : 4 011
    Points : 9 144
    Points
    9 144

    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 Sessions
    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