Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 12 sur 12
  1. #1
    Invité de passage
    Inscrit en
    septembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 32
    Points : 4
    Points
    4

    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 :
    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 :
    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 :
    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 :
    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 Gérard Ernaelsten
    DBA & Dev PHP
    Inscrit en
    juin 2005
    Messages
    3 808
    Détails du profil
    Informations personnelles :
    Nom : Homme Gérard Ernaelsten
    Âge : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : juin 2005
    Messages : 3 808
    Points : 8 123
    Points
    8 123

    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é de passage
    Inscrit en
    septembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 32
    Points : 4
    Points
    4

    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 Gérard Ernaelsten
    DBA & Dev PHP
    Inscrit en
    juin 2005
    Messages
    3 808
    Détails du profil
    Informations personnelles :
    Nom : Homme Gérard Ernaelsten
    Âge : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : juin 2005
    Messages : 3 808
    Points : 8 123
    Points
    8 123

    Par défaut

    J'ai un peu de mal à te suivre.

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

    Code :
    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é de passage
    Inscrit en
    septembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 32
    Points : 4
    Points
    4

    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 :
    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 Gérard Ernaelsten
    DBA & Dev PHP
    Inscrit en
    juin 2005
    Messages
    3 808
    Détails du profil
    Informations personnelles :
    Nom : Homme Gérard Ernaelsten
    Âge : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : juin 2005
    Messages : 3 808
    Points : 8 123
    Points
    8 123

    Par défaut

    J'imagine que c'est fait exprès d'écrire une clé tableau sans quote ?

    Code :
    1
    2
    3
    4
    5
    6
     
    $tab[MA_CLE]
     
    //au lieu de
     
    $tab['MA_CLE']

  7. #7
    Invité de passage
    Inscrit en
    septembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 32
    Points : 4
    Points
    4

    Par défaut

    oui tout à fait. MA_CLE est une constante qui dans mon exemple valait "ma valeur".
    Autrement dit :
    Code :
    $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 Gérard Ernaelsten
    DBA & Dev PHP
    Inscrit en
    juin 2005
    Messages
    3 808
    Détails du profil
    Informations personnelles :
    Nom : Homme Gérard Ernaelsten
    Âge : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : juin 2005
    Messages : 3 808
    Points : 8 123
    Points
    8 123

    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 :
    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é de passage
    Inscrit en
    septembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 32
    Points : 4
    Points
    4

    Par défaut

    tu veux dire que si deux constantes ont la même valeur, cela peut poser problème ?

    Ex:
    Code :
    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 Gérard Ernaelsten
    DBA & Dev PHP
    Inscrit en
    juin 2005
    Messages
    3 808
    Détails du profil
    Informations personnelles :
    Nom : Homme Gérard Ernaelsten
    Âge : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : juin 2005
    Messages : 3 808
    Points : 8 123
    Points
    8 123

    Par défaut

    exact

  11. #11
    Invité de passage
    Inscrit en
    septembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 32
    Points : 4
    Points
    4

    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 Gérard Ernaelsten
    DBA & Dev PHP
    Inscrit en
    juin 2005
    Messages
    3 808
    Détails du profil
    Informations personnelles :
    Nom : Homme Gérard Ernaelsten
    Âge : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : juin 2005
    Messages : 3 808
    Points : 8 123
    Points
    8 123

    Par défaut

    tiens j'avais pas pensé à inverser $constante['user']

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •