getTrace()方法在php中做了什么?什么是堆栈?

时间:2017-10-03 18:37:04

标签: php exception

我是php新手并从 php.net 学习它。任何人都能说出什么是堆栈以及为什么我们在php中使用 getTrace()方法?

当我使用以下代码时:

try{
    throw new Exception("Custom exception");
}catch(Exception $e){
    echo print_r($e->getTrace(),true);
}

返回以下内容

Array()

有谁可以告诉php中的 getTrace()方法做了什么?什么是堆栈?

1 个答案:

答案 0 :(得分:1)

当您调用函数时,PHP会跟踪调用代码的位置,以便在退出该函数时知道返回的位置。它使用堆栈作为函数调用的记录,即使从另一个函数中调用一个函数也是如此。

e.g

如果我有以下代码:

1. function a($value1, $value2) {
2.    return $value1 / $value2;
3.  }
4.
5. function b($value1) {
6.    return a($value1 / 12);
7. }
8.
9. echo b(12);

当PHP执行该行代码并调用函数b()时,对第9行的引用将被置于堆栈中。当函数b()调用函数a()时,对第6行的引用将被压入堆栈。当函数a()执行返回时,它会查看堆栈,并知道它必须继续执行第6行的代码(堆栈中的最后一个条目)。它删除了该堆栈条目并继续执行第6行的其余代码,这是函数b()的返回,因此它再次查看堆栈并找到对第9行的引用,因此它知道它需要继续从第9行继续执行代码,从堆栈中删除该条目并继续从第9行执行。

堆栈还用于保存传递给函数的所有参数的详细信息,因此它包含大量详细信息

getTrace()列出堆栈中的所有引用点,以及传递给函数的参数。