Xdebug n'est catégoriquement pas seulement une fonction PHP, qui était la requête d'origine. Si vous souhaitez par exemple utiliser le nom de la fonction appelante dans une logique PHP ultérieure et ne pas installer XDebug sur des serveurs de production, vous avez besoin d'une fonction PHP.
Il me semble que cela imprime le nom de la fonction appelée. Utilisez list(, $caller) = debug_backtrace(false);pour obtenir l'appelant, falsepour la performance ;-) (php5.3)
Znarkus
De nombreuses solutions vues sur le Web obtiennent le deuxième élément du tableau backtrace pour obtenir l'appelant de l'instance: pouvons-nous en être si sûrs? Le deuxième élément est-il toujours celui que nous recherchons? Je pensais qu'un __construct () qui inclut à l'intérieur un autre appel tel que parent :: __ construct () pourrait déplacer d'une autre position l'appelant réel (n'a pas encore essayé).
Emanuele Del Grande
1
J'ai essayé de vérifier l'ordre des appelants renvoyés lors de l'utilisation d'une ReflectionClass, et cela change évidemment la position de la méthode de l'appelant "réel", qui est visible dans l'interface utilisateur, donc aucune hypothèse sur la position de la trace arrière ne peut être faite.
Emanuele Del Grande
4
array shift supprimera le premier élément et retournera l'élément supprimé. Le tableau d'origine sera modifié et cela devrait donner le résultat souhaitéecho 'called by '.$trace[0]['function']
GoodSp33d
21
debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2)[1]['function'];pour obtenir le nom de l'appelant avec une meilleure performance.
ahuigo
17
Xdebug fournit quelques fonctions intéressantes.
<?php
ClassMyClass{function __construct(){
$this->callee();}function callee(){
echo sprintf("callee() called @ %s: %s from %s::%s",
xdebug_call_file(),
xdebug_call_line(),
xdebug_call_class(),
xdebug_call_function());}}
$rollDebug =newMyClass();?>
retournera trace
callee() called @/var/www/xd.php:16fromMyClass::__construct
Pour installer Xdebug sur ubuntu, le meilleur moyen est
C'est très tard mais je voudrais partager la fonction qui donnera le nom de la fonction à partir de laquelle la fonction courante est appelée.
publicfunction getCallingFunctionName($completeTrace=false){
$trace=debug_backtrace();if($completeTrace){
$str ='';foreach($trace as $caller){
$str .=" -- Called by {$caller['function']}";if(isset($caller['class']))
$str .=" From Class {$caller['class']}";}}else{
$caller=$trace[2];
$str ="Called by {$caller['function']}";if(isset($caller['class']))
$str .=" From Class {$caller['class']}";}return $str;}
/**
* Gets the caller of the function where this function is called from
* @param string what to return? (Leave empty to get all, or specify: "class", "function", "line", "class", etc.) - options see: http://php.net/manual/en/function.debug-backtrace.php
*/function getCaller($what = NULL){
$trace = debug_backtrace();
$previousCall = $trace[2];// 0 is this call, 1 is call in previous function, 2 is caller of that functionif(isset($what)){return $previousCall[$what];}else{return $previousCall;}}
Je voulais juste dire que la méthode de flori ne fonctionnera pas en tant que fonction car elle retournera toujours le nom de la fonction appelée au lieu de l'appelant, mais je n'ai pas la réputation de commenter. J'ai créé une fonction très simple basée sur la réponse de flori qui fonctionne bien pour mon cas:
class basicFunctions{publicfunction getCallerFunction(){return debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS,3)[2]['function'];}}
Réponses:
Voir debug_backtrace - cela peut tracer votre pile d'appels jusqu'en haut.
Voici comment attirer votre interlocuteur:
la source
list(, $caller) = debug_backtrace(false);
pour obtenir l'appelant,false
pour la performance ;-) (php5.3)echo 'called by '.$trace[0]['function']
debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2)[1]['function'];
pour obtenir le nom de l'appelant avec une meilleure performance.Xdebug fournit quelques fonctions intéressantes.
retournera trace
Pour installer Xdebug sur ubuntu, le meilleur moyen est
Vous devrez peut-être d'abord installer php5-dev
Plus d'informations
la source
C'est très tard mais je voudrais partager la fonction qui donnera le nom de la fonction à partir de laquelle la fonction courante est appelée.
J'espère que cela sera utile.
la source
debug_backtrace()
fournit des détails sur les paramètres, les appels de fonction / méthode dans la pile d'appels actuelle.la source
Fonctionne depuis PHP 5.4 .
Ou optimisé (par exemple pour les cas d'utilisation sans débogage):
Le premier argument empêche de remplir les arguments de fonction inutilisés, le second limite la trace à deux niveaux (nous avons besoin du second).
la source
J'ai fait ceci et je l'ai utilisé moi-même
la source
Je voulais juste dire que la méthode de flori ne fonctionnera pas en tant que fonction car elle retournera toujours le nom de la fonction appelée au lieu de l'appelant, mais je n'ai pas la réputation de commenter. J'ai créé une fonction très simple basée sur la réponse de flori qui fonctionne bien pour mon cas:
EXEMPLE:
la source
Vous pouvez extraire ces informations du tableau retourné par debug_backtrace
la source
Celui-ci a fonctionné le mieux pour moi:
var_dump(debug_backtrace());
la source
En fait, je pense que debug_print_backtrace () fait ce dont vous avez besoin. http://php.net/manual/en/function.debug-print-backtrace.php
la source
Cela devrait fonctionner:
la source
Cela le fera bien:
la source