Afficher le nom d'une variable

Afficher le nom d'une variable - PHP - Programmation

Marsh Posté le 12-05-2004 à 15:39:16    

Bonjour,
 
je voudrais récupérer le nom d'une variable sous forme d'une chaîne.
 
Autrement dit, comment programmer ma fonction test() pour obtenir ce résultat :
 
- appel :

$toto = 'plop';
test($toto);


 
- résultat (affichage) :

La variable $toto vaut 'plop'.


Message édité par nagadoudi le 12-05-2004 à 15:39:52
Reply

Marsh Posté le 12-05-2004 à 15:39:16   

Reply

Marsh Posté le 12-05-2004 à 15:43:02    


function test($valeur) {
return 'la variable $toto vaut '.$valeur;
}
 
echo test("plop" );


 
en esperant que tu comprennes le mecanisme :)

Reply

Marsh Posté le 12-05-2004 à 16:21:25    

Mon but c d'utiliser la f° avec _+ieurs_ variables !

Reply

Marsh Posté le 12-05-2004 à 16:22:21    

deja ecrit bien :heink:
 
ensuite ben, tu n'a qu'a rapeller ta fonction plusieur fois :o

Reply

Marsh Posté le 12-05-2004 à 16:23:38    

$toto = 'camembert';
$tata = 'vinasse';
$titi = 'accordéon';
test($toto);
test($tata);
test($titi);
 
-->
La variable $toto vaut 'camembert'.
La variable $tata vaut 'vinasse'.
La variable $titi vaut 'accordéon'.

Reply

Marsh Posté le 12-05-2004 à 16:24:14    

et?

Reply

Marsh Posté le 12-05-2004 à 16:27:38    

à la base, je ne connais pas le contenu de mes variables (elles sont définies dans des fonctions plutôt complexes)

Reply

Marsh Posté le 12-05-2004 à 17:06:12    

A priori c'est impossible, la fonction test n'est pas en mesure de connaître le nom de la variable dans la procédure appelante.

Code :
  1. function test($val, $name)
  2. {
  3.    echo "<p>La variable $name vaut '$val'</p>";
  4. }
  5. test($toto, "toto" );
  6. test($tata, "tata" );


Message édité par djdie le 12-05-2004 à 17:06:28
Reply

Marsh Posté le 12-05-2004 à 17:43:44    

OK djdie, dommage...
 
Et avec le "&" de &$ma_var, est-ce qu'il n'y a pas moyen de bidouiller ?

Reply

Marsh Posté le 12-05-2004 à 23:36:31    

Non rien à voir, ça c'est si tu passes des variables par référence, mais tu n'as toujours aucun moyen de connaître le nom de la variable avant l'appel de la fonction (du moins je ne vois pas comment).
 
Ce que tu essaies de faire est par exemple possible en C avec des macros, mais cela n'existe pas en PHP...
 
Ceci dit si tout cela sert à déboguer regarde du côté de var_dump peut-être... C'est assez utile.

Reply

Marsh Posté le 12-05-2004 à 23:36:31   

Reply

Marsh Posté le 13-05-2004 à 00:12:01    

Peut-être qu'il y aurait moyen de passer seulement le nom de la variable, et d'essayer de récupérer la valeur avec un eval. Mais il faut faire d'abord un global. Ca peut marcher, je n'ai jamais essayé.
 
Un truc dans le genre :  
 

Code :
  1. function test($name)
  2.   {
  3.        eval "global \$$name; \$val=\$$name; ";
  4.        echo "<p>La variable $name vaut '$val'</p>";
  5.   }
  6.  
  7.   test("toto" );


---------------
Info-Camargue, le portail de la Camargue
Reply

Marsh Posté le 13-05-2004 à 07:44:52    

Ceci marche :
 

Code :
  1. function affiche($var) {
  2. global $$var;
  3. echo 'La variable '.$var.' vaut '.$$var;
  4. }
  5. $mavar = "a";
  6. affiche("mavar" );


 
Edit : ça ne marchera que si $mavar est définie globalement, a priori.


Message édité par sielfried le 13-05-2004 à 07:49:26

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 13-05-2004 à 09:46:01    

OK, merci beaucoup. Les deux solutions marchent.
Voici ma fonction de débugage, à réutiliser comme bon vous semble :

/**
 * Affiche le contenu d'une variable (pour débugage, pratique pour les booléens et les tableaux).
 *
 * @param string $var le nom de la variable à tester (chaine)
 * @return void
 */
function echo_var($var) {
 global $$var;
 echo '
<div>';
 echo "<b>\$$var :</b> ";
 if(gettype($$var)=='boolean') {
  if($$var) echo '<span style="font-family:monospace;">TRUE</span></div>';
  else      echo '<span style="font-family:monospace;">FALSE</span></div>';
 }
 elseif(gettype($$var)=='NULL') {
  echo '<span style="font-family:monospace;">NULL</span> <i>ou indéfini</i></div>';
 }
 elseif(gettype($$var)=='integer' || gettype($$var)=='double' || gettype($$var)=='string') {
  echo '<span style="font-family:monospace;">'.$$var.'</span></div>';
 }
 else {
  echo '<pre style="margin:0 0 0 30px; border-left:1px #999 dotted; padding-left:5px;">';
  print_r($$var);
  echo '</pre></div>';
 }
}

Reply

Marsh Posté le 13-05-2004 à 10:10:17    

oui bon ça évidemment ça marche, mais alors si tu as partout des variables globales, avant de commencer à déboguer, commence par re-réfléchir à la structure de ton code !!!

Reply

Marsh Posté le 13-05-2004 à 13:49:22    

Rectif : les deux solutions marchent selon la config du serveur PHP.
 
Sinon, il faut déclarer la var à tester en global dans la fonction de test (comme prévu dans le script), mais aussi dans la fonction appelante...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed