Sunday, December 29, 2024
Google search engine
HomeLanguagesPrint PHP Call Stack

Print PHP Call Stack

Given a PHP code and task is to print call stack for this PHP code. In the given PHP code, a child_func() function calls parent_func() function which further calls grandparent_func() function resulting in a call stack.

Approach 1: Print the call stack using debug_print_backtrace() function.

Example:




<?php
// PHP program to print PHP call stack
  
// Function to call parent_func 
function child_func() {
    parent_func();
}
  
// Function to call grandparent_func
function parent_func() {
    grandparent_func();
}
  
// Function to print call stack
function grandparent_func() {
    debug_print_backtrace();
}
  
// Main function call
child_func();
  
?>


Output:

#0  grandparent_func() called at [/home/905a3b4d90f10b30521fedcb56c99fba.php:12]
#1  parent_func() called at [/home/905a3b4d90f10b30521fedcb56c99fba.php:7]
#2  child_func() called at [/home/905a3b4d90f10b30521fedcb56c99fba.php:21]

Approach 2: Print the call stack using debug_backtrace() function.
Example:




<?php
// PHP program to print PHP call stack
  
// Function to call parent_func 
function child_func() {
    parent_func();
}
  
// Function to call grandparent_func
function parent_func() {
    grandparent_func();
}
  
// Function to print call stack
function grandparent_func() {
    var_dump(debug_backtrace());
}
  
// Main function call
child_func();
  
?>


Output:

array(3) {
  [0]=>
  array(4) {
    ["file"]=>
    string(42) "/home/2b81f040639170c49a6a58adb23d5154.php"
    ["line"]=>
    int(12)
    ["function"]=>
    string(16) "grandparent_func"
    ["args"]=>
    array(0) {
    }
  }
  [1]=>
  array(4) {
    ["file"]=>
    string(42) "/home/2b81f040639170c49a6a58adb23d5154.php"
    ["line"]=>
    int(7)
    ["function"]=>
    string(11) "parent_func"
    ["args"]=>
    array(0) {
    }
  }
  [2]=>
  array(4) {
    ["file"]=>
    string(42) "/home/2b81f040639170c49a6a58adb23d5154.php"
    ["line"]=>
    int(21)
    ["function"]=>
    string(10) "child_func"
    ["args"]=>
    array(0) {
    }
  }
}

Approach 3: The getTraceAsString() member function of Exception class returns a call stack.

Example:




<?php
// PHP program to print PHP call stack
  
// Function to call parent_func 
function child_func() {
    parent_func();
}
  
// Function to call grandparent_func
function parent_func() {
    grandparent_func();
}
  
// Function to print call stack
function grandparent_func() {
    $e = new Exception;
    var_dump($e->getTraceAsString());
}
  
// Main function call
child_func();
  
?>


Output:

string(207) "#0 /home/8d8303d43667a4915d43dab7d63de26d.php(12): grandparent_func()
#1 /home/8d8303d43667a4915d43dab7d63de26d.php(7): parent_func()
#2 /home/8d8303d43667a4915d43dab7d63de26d.php(22): child_func()
#3 {main}"

RELATED ARTICLES

Most Popular

Recent Comments