首頁  >  文章  >  後端開發  >  PHP怎麼會列印呼叫堆疊

PHP怎麼會列印呼叫堆疊

藏色散人
藏色散人原創
2019-01-24 13:45:398520瀏覽

在給定的PHP程式碼中,child_func()函數呼叫parent_func()函數,該函數進一步呼叫grandparent_func()函數,從而產生呼叫堆疊。

PHP怎麼會列印呼叫堆疊

推薦學習:《PHP教學

PHP列印呼叫堆疊的三種方法如下:

方法1:使用debug_print_backtrace()函數列印呼叫堆疊。

範例:

<?php 
// 用于打印PHP调用堆栈的PHP程序
//调用函数parent_func
function child_func() { 
    parent_func(); 
} 
  
// 调用grandparent_func函数
function parent_func() { 
    grandparent_func(); 
} 
  
// 函数的作用是:打印调用堆栈
function grandparent_func() { 
    debug_print_backtrace(); 
} 
  
//主函数调用 
child_func(); 
  
?>

輸出:

#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]

#方法2:使用debug_backtrace()函數列印呼叫堆疊。

範例:

<?php 
// 用于打印PHP调用堆栈的PHP程序
//函数调用parent_func
function child_func() { 
    parent_func(); 
} 
  
// 函数调用grandparent_func
function parent_func() { 
    grandparent_func(); 
} 
  
// 函数的作用是:打印调用堆栈
function grandparent_func() { 
    var_dump(debug_backtrace()); 
} 
  
// 主函数调用 
child_func(); 
  
?>

輸出:

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) {
    }
  }
}

#方法3: Exception類別的getTraceAsString()成員函數傳回一個呼叫堆疊。

範例:

<?php 
// 用于打印PHP调用堆栈的PHP程序
//函数调用parent_func
function child_func() { 
    parent_func(); 
} 
  
// 函数调用grandparent_func
function parent_func() { 
    grandparent_func(); 
} 
  
// 函数的作用是:打印调用堆栈
function grandparent_func() { 
    $e = new Exception; 
    var_dump($e->getTraceAsString()); 
} 
  
// 主函数调用
child_func(); 
  
?>

輸出:

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}"

這篇文章就是關於PHP怎麼列印呼叫堆疊的三種方法介紹,希望對需要的朋友有所幫助!

以上是PHP怎麼會列印呼叫堆疊的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn