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_backtracesaudebug_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).