在 PHP 中,执行栈(execution stack)是一个数据结构,用于存储当前正在执行的函数调用堆栈。每当执行一个函数时,PHP 引擎都会将函数调用信息(例如函数名、参数、返回地址等)保存在执行栈中,等函数执行完毕后再将其弹出。
执行栈的底层原理可以简单地描述为以下几个步骤:
初始化执行栈:当 PHP 脚本开始执行时,引擎会初始化执行栈,创建一个空栈并将其推入当前线程的堆栈。
执行函数调用:当遇到一个函数调用时,引擎会将函数调用信息(例如函数名、参数、返回地址等)打包成一个栈帧(stack frame),并将其推入执行栈中。
执行函数体:引擎会根据函数调用信息中的函数名和参数,执行函数体中的代码。在执行函数体时,引擎会使用局部变量表(local variable table)来存储函数内部的变量和参数。
返回函数调用:当函数执行完毕后,引擎会将执行栈的栈顶栈帧弹出,并将控制权返回到调用该函数的位置。
重复执行:如果函数体中还有其他函数调用,引擎会重复执行上述过程,将新的栈帧推入执行栈中。
执行栈的大小是有限的,如果函数嵌套过深或递归调用过多,可能会导致执行栈溢出(stack overflow)而程序崩溃。为了避免这种情况,PHP 引擎会对执行栈的大小进行限制,并在达到一定深度时抛出异常。