Aller au contenu

Fonctions: comment récupérer nom de la variable initiale ?


hebus_san

Sujets conseillés

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 :

$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 ;)

Merci

-- hebus_san --

Lien vers le commentaire
Partager sur d’autres sites

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 ?

Lien vers le commentaire
Partager sur d’autres sites

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 :

<?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 ;)

Lien vers le commentaire
Partager sur d’autres sites

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 :

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

Lien vers le commentaire
Partager sur d’autres sites

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 ;)

Merci pour tes réponses

Lien vers le commentaire
Partager sur d’autres sites

  • 1 month later...

Hello :)

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 :

/**
* _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>';
}

}

$this->status

Permet de choisir si on souhaite activé les informations de notice elle est a true.

Pour appeler cette méthode tu fais :

$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 :

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

Lien vers le commentaire
Partager sur d’autres sites

  • 3 years later...

Bonjour,

Moi, ne trouvant pas de réponse non plus, j'ai fini par bricoler cette solution qui marche sur mon serveur local (Wampserver).

Pas essayé ailleurs.

La voilà :

function ekovar($var){
global ${$var};
echo ('<br />'.$var.' : '.${$var});
}

$ma_var = "C'est ma variable";
ekovar('ma_var');

Affichage obtenu :

ma_var : C'est ma variable

L'appel se fait en mettant le nom de la variable entre guillemets, sans le $

Je crois que c'est ce que tu recherchais, un appel le plus court possible à écrire.

Mais depuis le temps tu as sans doute déjà trouvé une solution simple.

P.S. :

Et pour un tableau j'ai fait ça :

function ekotab($tab){
global ${$tab};
echo '<br /><br />Tableau : '.$tab.'<br /><pre>';
print_r (${$tab});
echo '</pre>';
}

$mon_tablo = array("C'est ma première donnée","C'est ma deuxième donnée");
ekotab('mon_tablo');

Affichage obtenu :

Tableau : mon_tablo

Array

(

[0] => C'est ma première donnée

[1] => C'est ma deuxième donnée

)

Modifié par Wubronce
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...