OVH Cloud OVH Cloud

Retrouver le nom de la fonction d'appel

8 réponses
Avatar
Arnold McDonald
Salut

Comment connaître, depuis une fonction quel est le nom de celle qui l'appele
éventuellement ? Par exemple

fonctiona()
{
b();
}
dans b(), on souhaite savoir que c'est a() la fonction qui appelle. C'est
faisable ? Via quelle fonction PHP ?

Merci.

8 réponses

Avatar
Bruno Desthuilliers
Salut

Comment connaître, depuis une fonction quel est le nom de celle qui l'appele
éventuellement ?


Cherches par là :
http://fr.php.net/manual/en/function.debug-backtrace.php

Merci.


Avatar
1ternaute
Cherches par là :
http://fr.php.net/manual/en/function.debug-backtrace.php
Bonjour,


Faut etre motive pour rentrer la dedans ;o)

Example 1. debug_backtrace() example

<?php
// filename: a.php

function a_test($str)
{
echo "nHi: $str";
var_dump(debug_backtrace());
}

a_test('friend');
?>

<?php
// filename: b.php
include_once '/tmp/a.php';
?>

Moi, la, var_dump(debug_backtrace() , une fonction var_dump qui appelle
debug_backtrace() pour expliquer debug_backtrace(), j'abandonne.
Dommage, qu'il y a pas des trucs simples, tout bete, le mimimum, pas de
choses impressionnantes a rallonge. Bon, quand meme, on arrive a
comprendre, mais faut secouer la pulpe ;o)

Avatar
bruno at modulix
1ternaute wrote:
Cherches par là :
http://fr.php.net/manual/en/function.debug-backtrace.php


Bonjour,

Faut etre motive pour rentrer la dedans ;o)


Faut être motivé pour être développeur. Sinon, plombier, c'est pas mal
aussi !-)

Example 1. debug_backtrace() example

<?php
// filename: a.php

function a_test($str)
{
echo "nHi: $str";
var_dump(debug_backtrace());
}

(snip)

Moi, la, var_dump(debug_backtrace() , une fonction var_dump qui appelle
debug_backtrace() pour expliquer debug_backtrace(), j'abandonne.


Pourquoi ? c'est le meilleur moyen de voir à quoi ressemble le retour de
debug_traceback(), non ?

Dommage, qu'il y a pas des trucs simples, tout bete, le mimimum, pas de
choses impressionnantes a rallonge.


Hem... Si tu trouves qu'on est dans les "choses impressionnantes a
rallonge", change de métier, parce que là, franchement, plus "simple et
tout bête", je vois pas :-/

Sérieusement, c'est quoi qui te pose problème là dedans ?

--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in ''.split('@')])"


Avatar
1ternaute

Faut être motivé pour être développeur. Sinon, plombier, c'est pas mal
aussi !-)
Example 1. debug_backtrace() example

<?php
// filename: a.php

function a_test($str)
{
echo "nHi: $str";
var_dump(debug_backtrace());


Pourquoi ? c'est le meilleur moyen de voir à quoi ressemble le retour de
debug_traceback(), non ?

Sérieusement, c'est quoi qui te pose problème là dedans ?

Bonjour,


C'est global ;o)
Je M'EXPLIQUE ;o)
Je cherche a comprendre une fonction, en locurence debug_backtrace.
J'arrive sur ce site (temps de chargement .), explications, je capte en
quelqque seconde que ca renvoit un tableau, ben, je suis bien content,
et c'est quoi ce tableau :

function string The current function name. See also __FUNCTION__.

line integer The current line number. See also __LINE__.

file string The current file name. See also __FILE__.

class string The current class name. See also __CLASS__

type string The current call type. If a method call, "->" is returned.
If a static method call, "::" is returned. If a function call, nothing
is returned.

args array If inside a function, this lists the functions arguments. If
inside an included file, this lists the included file name(s).

[ See also ]
Bon, la, avec l'exemple, deja je decroche. Je prefereais 1000 fois un
exemple tout con :

<?php
function test($str)
{
echo "$str";
(debug_backtrace());
}
test('friend');
?>

ensuite le resultat. Bon, j'ai pas regarde ce que ca pourrait faire (
pas le temps ;o))

Mais un truc hyper de base qui MARCHE avec le resultat, moi, apres je me
debrouille pour compliquer le bazar si besoin est, mais j'ai au moins un
truc de base et simple que je comprends et qui marche ;o)

A chaque fois que j'arrive sur ce site, c'est un loto, bingo, c'est
simple et concis, loupe, ca renvoie sur plein de truc que j'ai pas le
temps ;o)

Maintenant, merci ce site quand meme ! Faut pas croire que je suis pas
hyper content que ce site existe, c'est juste que je lui reproche de
n'avoir pas une demarche, plus, comment je pourrais dire ? Serialisee ?
Cellulaire ?

Suis je clair la ?

ps :
La plomberie ......... Bon, je vais faire un effort ;o)


Avatar
dmetzler
en même temps, on te trouve un peu faignant sur ce coup :
- on te donne la fonction qui va bien avec un lien sur la doc
- dans la doc si tu lis un petit peu, tu vois que la fonction renvoie
un tableau avec la liste des appels (c'est peut être pas hyper
expliqué mais y'a un exemple)
- le dernier appel est celui qui t'intéresse et tu veux le nom de la
fonction c'est donc l'index function qui t'intéresse

ça donne :

$TRACEÞbug_backtrace();
echo $TRACE[count($TRACE)-1]["function"];


Mais attention ca plante si tu n'a pas appelé ta fonction depuis une
autre fonction. C'est pour cela qu'on te donne la doc de la fonction et
qu'après tu peux essayer de chopper ce qui t'intéresse dedans.

Le développement c'est avant tout beaucoup de recherche dans les docs,
les API etc.... Quand on s'en sort vraiment pas, alors après on va sur
Usenet pour demander.
Avatar
1ternaute
en même temps, on te trouve un peu faignant sur ce coup :
- on te donne la fonction qui va bien avec un lien sur la doc
- dans la doc si tu lis un petit peu, tu vois que la fonction renvoie
un tableau avec la liste des appels (c'est peut être pas hyper
expliqué mais y'a un exemple)
- le dernier appel est celui qui t'intéresse et tu veux le nom de la
fonction c'est donc l'index function qui t'intéresse

ça donne :

$TRACEÞbug_backtrace();
echo $TRACE[count($TRACE)-1]["function"];


Mais attention ca plante si tu n'a pas appelé ta fonction depuis une
autre fonction. C'est pour cela qu'on te donne la doc de la fonction et
qu'après tu peux essayer de chopper ce qui t'intéresse dedans.

Le développement c'est avant tout beaucoup de recherche dans les docs,
les API etc.... Quand on s'en sort vraiment pas, alors après on va sur
Usenet pour demander.
Non, non, je ne suis pas d'accord avec toi ;o)

"C'est de demarrer qui est dificile". Quand on se lance dans php, la
c'est dur, une fois qu'on a le 'nez' dedans, c'est plus pareil
d''eplucher' la syntaxe php. C'est pas de la faignantise, c'est que
l'energie que met un debutant pour avancer d'une marche ( bien petite au
regard de ceux qui savent ) est bien plus considerable comme par exemple
dans le cas que tu site ( count($TRACE)-1]["function"] ) ;o) que pour
un 'confirme' de monter la meme petite marche, et donc, le developement
de php entre les mains des extra-bonnes volontes qui maintiennnet ce
genre de site fabuleux ( c'est grace a ce site que je me met a la
programation de php ) passe ( a mon humble avis ) aussi par l'energie
apportee par ces bonnes ames au neophytes qui decouvrent php ;o), ET
C'EST POUR CA ;o) que je propose d'<atomiser> la connaissance pour
chaque fonction en decortiquant au moins une fois un exemple simple ou
n'apparait que l'expression unique de la fonction ( si c'est possible ) ;o)
Alors, j'en rajouterai une couche, avec la facon dont un neophyte peut
se faire 'jeter ' par certain de ceux qui savent, meme, si de leur point
de vue je comprends bien leur reaction, mais quand meme, des fois ca
ressemble plus a un jeu de role qu'autre chose !! ;o)

Avatar
dmetzler
En même temps, le genre de fonction que Arnold nous demande est pas
souvent utilisée par le premier newbie venue. On en conclue donc qu'il
n'est pas un newbie, d'où les réponses que tu peux trouver.

Sinon, je suis le premier à dire que pour apprendre un langage, il
faut d'abord savoir lire la doc. Savoir lire veut aussi dire savoir
déchiffrer la doc.

Ok l'exemple est pas forcément atomique, mais une doc n'a pas pour
vocation de montrer des exemples particuliers. L'exemple qu'ils donnet
permet bien mieux d'illustrer la fonction debug_backtrace qu'un
[count($TRACE) -1]['function']....

D'autre part, Arnold nous demande quelle est la fonction qui permet
d'avoir des info sur la fonction appelant et Bruno n'a rien fait
d'autre que de lui répondre.
Avatar
Bruno Desthuilliers

(snip)


Le développement c'est avant tout beaucoup de recherche dans les docs,
les API etc.... Quand on s'en sort vraiment pas, alors après on va sur
Usenet pour demander.


Non, non, je ne suis pas d'accord avec toi ;o)
"C'est de demarrer qui est dificile". Quand on se lance dans php, la
c'est dur,


Oui, il faut à peu près trois jours pour faire son premier site php...
Ce n'est pas PHP qui est diffile à apprendre, c'est la programmation. Et
comme le dit si bien Damien, la programmation, c'est avant tout RTFM et
Use the code, Luke.

(snip)

et donc, le developement
de php entre les mains des extra-bonnes volontes qui maintiennnet ce
genre de site fabuleux ( c'est grace a ce site que je me met a la
programation de php ) passe ( a mon humble avis ) aussi par l'energie
apportee par ces bonnes ames au neophytes qui decouvrent php ;o),


Je ne suis pas une bonne âme.

ET
C'EST POUR CA ;o) que je propose d'<atomiser> la connaissance pour
chaque fonction en decortiquant au moins une fois un exemple simple ou
n'apparait que l'expression unique de la fonction ( si c'est possible )
;o)


Mais je t'en prie, fait le. La doc PHP est ouverte aux commentaires,
donc ne te prive surtout pas.

Alors, j'en rajouterai une couche, avec la facon dont un neophyte peut
se faire 'jeter ' par certain de ceux qui savent,


Si c'est de ma réponse à Arnold que tu parles, il faudra que tu revois
ta définition de "jeter". Il ne demandais pas des explications sur telle
ou telle subtilité de debug_backtrace(), mais sur l'existence d'une
fonctionnalité - qui se trouve être fournie par debug_backtrace().

Si après avoir lu la doc et essayé par lui-même, il a un problème, ne
t'inquiètes pas, il sera certainement capable de demander de l'aide par
lui-même. Et "ceux qui savent" se feront certainement un plaisir de
répondre. Mais bon, là aussi je rejoins Damien, il est rare que
quelqu'un s'intéressant à ce genre de fonctionnalité ait besoin qu'on le
prenne par la main.