157 votes

Fonction d'appel en PHP 5 ?

Existe-t-il une fonction PHP permettant de connaître le nom de la fonction appelante dans une fonction donnée ?

226voto

Paul Dixon Points 122033

Ver debug_backtrace - cela peut tracer votre pile d'appels jusqu'au sommet.

Voici comment vous obtiendriez de votre interlocuteur

$trace=debug_backtrace();
$caller=array_shift($trace);

echo "Called by {$caller['function']}";
if (isset($caller['class']))
    echo " in {$caller['class']}";

18voto

svassr Points 1692

Xdebug fournit quelques fonctions intéressantes.

<?php
  Class MyClass
  {
    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 = new MyClass();
?>

retournera une trace

callee() called @ /var/www/xd.php: 16 from MyClass::__construct

Pour installer Xdebug sur ubuntu, la meilleure façon est la suivante

sudo aptitude install php5-xdebug

Vous devrez peut-être installer d'abord php5-dev.

sudo aptitude install php5-dev

plus d'infos

16voto

CMS Points 315406

debug_backtrace() fournit les détails des paramètres, des appels de fonctions/méthodes dans la pile d'appels actuelle.

16voto

MANISH ZOPE Points 326

C'est très tard mais je voudrais partager la fonction qui donnera le nom de la fonction à partir de laquelle la fonction actuelle est appelée.

public function 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;
    }

J'espère que cela vous sera utile.

7voto

Paul Gobée Points 171

Je l'ai fait et je l'utilise moi-même

/**
 * 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 function

    if(isset($what))
    {
        return $previousCall[$what];
    }
    else
    {
        return $previousCall;
    }   
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X