Récupérer le nom de la fonction appelante dans un message de debug avec PHP

Publié le 22/09/2022 • Actualisé le 22/09/2022


English language detected! 🇬🇧

  We noticed that your browser is using English. Do you want to read this post in this language?

Read the english version 🇬🇧 Close

Dans ce bout de code, nous voyons comment récupérer le nom de la fonction appelante dans un message de debug avec PHP. C'est un besoin courant, quand on veut logger ou afficher un message de debug utile avec du contexte. Les deux arguments de la fonction debug_backtrace() sont importants pour des raisons de performance, sinon on récupère la trace complète du script en cours avec des objets.


<?php

declare(strict_types=1);

namespace App\Controller\Snippet;

use function Symfony\Component\String\u;

/**
 * J'utilise un trait PHP afin d'isoler chaque snippet dans un fichier.
 * Ce code doit être apellé d'un contrôleur Symfony étendant AbstractController (depuis Symfony 4.2)
 * ou Symfony\Bundle\FrameworkBundle\Controller\Controller (Symfony <= 4.1).
 * Les services sont injectés dans le constructeur du contrôleur principal.
 */
trait Snippet220Trait
{
    public function snippet220(): void
    {
        $dbg = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
        $file = u($dbg[0]['file'] ?? '')->after('strangebuzz.com')->toString(); // only keep the root project path
        $line = $dbg[0]['line'] ?? '';
        $function = $dbg[1]['function'] ?? '';
        $class = $dbg[1]['class'] ?? '';

        echo "This function was called by $class::$function() at line $line (from file $file).";

        // That's it! 😁
    }
}

 Exécuter le snippet  Plus sur Stackoverflow   Lire la doc  Snippet aléatoire

  Travaillez avec moi !