Version complète: sur le forum Webmaster Hub : Fonctions: comment récupérer nom de la variable initiale ?
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
hebus_san
Bonsoir

Je cherche activement à récupérer le nom de la variable initiale passée en argument d'une fonction.

Pourquoi me direz-vous ? Parce que je cherche à faire une sorte de fonction 'print_r' maison afin d'afficher les éléments du tableau (quel que soit le nombre de niveaus) mais aussi le NOM de la variable qui a été passée en argument.

Exemple :

CODE
$mon_tableau = Array('a','b','c');

function print_r_html($tab) {
  // ici le code indiquant le nom de la variable passée à la fonction
  // résultat souhaité : "Variable: mon_tableau"
  // ici le code affichant l'arborescence du tableau (clé -> valeur), code que j'ai déjà
}

print_r_html($mon_tableau);

// devrais donner :
Variable 'mon_tableau' :
0 : a
1 : b
2 : c


Voilà je ne sais pas si c'est possible.

En tout cas si vous avez des idées ou des solutions, je suis prenneur wink.gif

Merci

-- hebus_san --
TheRec
Bonjour,

J'ai de la peine à me représenter quelle est l'utilité de connaître le nom d'origine d'une variable passée en paramètre. Si le but est de modifier la valeur de la variable passé en paramètre, il suffit de définir ce paramètre comme référence lors de la déclaration de la fonction (plus d'information pour le passage par référence dans le manuel).

Fondamentalement le nom de la variable en question ne devrait être pas être important dans le contexte de la fonction, c'est justement pour cela qu'il y a possibilité de passer des paramètres par référence ou par valeur...

Peut-être ai-je mal compris ta question ?
hebus_san
En fait, il n'est aucunement question de modifier des valeurs.
Je veux juste écrire à titre indicatif le nom de la variable passé en argument. Ca peut avoir son utilité dans un contexte de debug par exemple (voir les valeurs d'une variable).

J'essaie juste de trouver un moyen de me faciliter la vie pour le debug car je pourrais effectivement faire comme ceci :
CODE
<?php
print_r_html($mon_tableau,'mon_tableau');
?>

Qui donnerait :
Variable 'mon_tableau':
0 => a,
1 => b,
2 => c

mais bon, c'est lourd...

Merci cependant pour ta réponse wink.gif
TheRec
Dans ce cas non.. à ma connaissance il n'est pas possible de récupérer le nom de la variable passée en paramètre à une fonction. Le plus proche que je connaisse permet de récupérer le nom des variables disponible dans le contexte de la fonction get_defined_vars ou encore si tu veux limiter cette liste aux arguments passés à la fonction func_get_args.

Je sais que cela ne correspond pas à ce que tu recherche, mais selon moi ce que tu souhaites faire n'est tout simplement pas prévu simplement par la nature des fonctions, elle doivent être indépendantes du contexte dans lequel elles sont appelées. En plus je vois difficilement ce que retournerait ton script lorsque ta fonction serait appelée sans que le paramètre original soit une variable à proprement parler, par exemple :
CODE
une_fonction("une chaîne au lieu d'une variable");


Si pour chaque appel à une fonction l'interpréteur PHP devait stocker ce genre d'information sur les paramètres j'ose difficilement envisager comment des appels récursifs (par exemple) se dérouleraient et la quantité de mémoire dont il faudrait disposer :S
hebus_san
CITATION(TheRec @ dimanche 28 janvier 2007, 19h32) *
Dans ce cas non.. à ma connaissance il n'est pas possible de récupérer le nom de la variable passée en paramètre à une fonction. Le plus proche que je connaisse permet de récupérer le nom des variables disponible dans le contexte de la fonction get_defined_vars ou encore si tu veux limiter cette liste aux arguments passés à la fonction func_get_args.


Ok c'est bien ce que je pensais car même en cherchant partout, je ne trouvais rien wink.gif

Merci pour tes réponses
caledonien
Hello smile.gif

C'est marrant en faisant une recherche sur google je suis tombé sur ce topic, je souhaite également faire la même chose que toi.

Pour cela je fais :

CODE
/**
    * _AT_desc  Permet d'afficher les arrays pour effectuer un debug ou juste pour information.
    * _AT_return Un prin_r amélioré.
    **/
    function debug_Print_r ($type,$array) {
        if ($this->status) {
            echo '<pre>';
            echo "<b>".$type."</b> ";
            echo var_export($array);
            echo '</pre>';
        }

    }


CODE
$this->status
Permet de choisir si on souhaite activé les informations de notice elle est a true.

Pour appeler cette méthode tu fais :

CODE
$this->debug_Print_r("id_des_themes", $id_des_themes);


C'est le seul moyen que j'ai trouvé pour faire ce qu'on souhaite.

Ce qui donne :

CODE
id_des_themes array (
  0 => '1',
  1 => '2',
)


Tu peux tres facilement transformer cette méthode en fonction.


Bonne Continuation



---
La Nouvelle Calédonie en couleurs:
Caledonien.org
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.