debug_backtrace în PHP

Returnează lista apelurilor de funcții care au dus până în punctul curent al codului.

Sintaxă
debug_backtrace(int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT, int $limit = 0): array

Ce face debug_backtrace

debug_backtrace răspunde la întrebarea „cine a apelat această funcție?”. Returnează un tablou: elementul 0 este apelul curent, elementul 1 este cel dinaintea lui și așa mai departe. Fiecare element are cheile function, line și file (unde a fost făcut apelul), args și, pentru metode, class și type.

Pentru o afișare rapidă există debug_print_backtrace(). Ca să nu încarci memoria, folosește opțiunea DEBUG_BACKTRACE_IGNORE_ARGS și o limită de nivele.

Parametri

Parametru Descriere
$options Opțional. DEBUG_BACKTRACE_IGNORE_ARGS nu include argumentele, DEBUG_BACKTRACE_PROVIDE_OBJECT include obiectul pentru metode.
$limit Opțional. Numărul maxim de nivele. 0 înseamnă toate.

Ce returnează

Un tablou cu câte un element pentru fiecare apel.

Exemple

Exemplul 1: Cine a apelat funcția

<?php
function jurnal(string $mesaj): void
{
    $urma = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
    // [0] este apelul lui jurnal(), [1] este funcția din care s-a făcut apelul.
    echo "[" . $urma[1]["function"] . ", linia " . $urma[0]["line"] . "] $mesaj\n";
}

function salveazaComanda(): void
{
    jurnal("Comanda a fost salvată");
}

function trimiteFactura(): void
{
    jurnal("Factura a fost trimisă");
}

salveazaComanda();
trimiteFactura();

Rezultat

[salveazaComanda, linia 11] Comanda a fost salvată
[trimiteFactura, linia 16] Factura a fost trimisă

Exemplul 2: Tot lanțul de apeluri

Linia din fiecare element este linia la care a fost făcut acel apel.

<?php
class Cos
{
    public function finalizeaza(): void
    {
        plata(259.9);
    }
}

function plata(float $suma): void
{
    foreach (debug_backtrace() as $nivel => $apel) {
        $unde = isset($apel["class"]) ? $apel["class"] . $apel["type"] : "";
        echo "#$nivel $unde" . $apel["function"] . "() la linia " . $apel["line"] . "\n";
    }
}

(new Cos())->finalizeaza();

Rezultat

#0 plata() la linia 6
#1 Cos->finalizeaza() la linia 18

Greșeli frecvente

  • Lași debug_backtrace sau debug_print_backtrace în codul publicat și afișezi rezultatul vizitatorilor. Arată căi de fișiere și argumente, inclusiv parole.

Comenzi înrudite

  • Exception: Clasa de bază pentru excepții. Extinde-o ca să creezi tipuri proprii de erori pentru aplicația ta.
  • error_log: Scrie un mesaj în jurnalul de erori al serverului sau într-un fișier ales de tine.
  • func_get_args / func_num_args: Returnează, ca tablou, toate argumentele primite de funcția curentă (func_num_args dă numărul lor).