Précédent   Forum du club des développeurs et IT Pro > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 25/09/2012, 12h33   #1
dr.krusty
Invité de passage
 
Inscription : septembre 2006
Messages : 31
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 31
Points : 3
Points : 3
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 ?
dr.krusty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2012, 12h44   #2
MaitrePylos
Responsable Livres

 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 588
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 40
Localisation : Belgique

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

Informations forums :
Inscription : juin 2005
Messages : 3 588
Points : 8 834
Points : 8 834
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.
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2012, 12h50   #3
dr.krusty
Invité de passage
 
Inscription : septembre 2006
Messages : 31
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 31
Points : 3
Points : 3
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 ?
dr.krusty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2012, 12h59   #4
MaitrePylos
Responsable Livres

 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 588
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 40
Localisation : Belgique

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

Informations forums :
Inscription : juin 2005
Messages : 3 588
Points : 8 834
Points : 8 834
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 ?
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2012, 14h17   #5
dr.krusty
Invité de passage
 
Inscription : septembre 2006
Messages : 31
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 31
Points : 3
Points : 3
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 ?
dr.krusty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2012, 14h32   #6
MaitrePylos
Responsable Livres

 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 588
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 40
Localisation : Belgique

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

Informations forums :
Inscription : juin 2005
Messages : 3 588
Points : 8 834
Points : 8 834
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']
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2012, 14h36   #7
dr.krusty
Invité de passage
 
Inscription : septembre 2006
Messages : 31
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 31
Points : 3
Points : 3
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.
dr.krusty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2012, 16h38   #8
MaitrePylos
Responsable Livres

 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 588
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 40
Localisation : Belgique

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

Informations forums :
Inscription : juin 2005
Messages : 3 588
Points : 8 834
Points : 8 834
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;  
 
    }
 
}
?>
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2012, 16h52   #9
dr.krusty
Invité de passage
 
Inscription : septembre 2006
Messages : 31
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 31
Points : 3
Points : 3
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 ?
dr.krusty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2012, 09h40   #10
MaitrePylos
Responsable Livres

 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 588
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 40
Localisation : Belgique

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

Informations forums :
Inscription : juin 2005
Messages : 3 588
Points : 8 834
Points : 8 834
exact
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2012, 09h46   #11
dr.krusty
Invité de passage
 
Inscription : septembre 2006
Messages : 31
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 31
Points : 3
Points : 3
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 !
dr.krusty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2012, 09h49   #12
MaitrePylos
Responsable Livres

 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 588
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 40
Localisation : Belgique

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

Informations forums :
Inscription : juin 2005
Messages : 3 588
Points : 8 834
Points : 8 834
tiens j'avais pas pensé à inverser $constante['user']
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 10h31.


 
 
 
 
Partenaires

Hébergement Web