関数を呼び出すと、PHPは呼び出し元のコードの場所を追跡し、その関数を終了するときにどこに戻るかを知ることができます。別の関数内からある関数を呼び出す場合でも、関数呼び出しのレコードとしてスタックを使用します。
例えば
Iは、次のコードがある場合:
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);
をライン9への参照をPHPコードとコールのラインがb()
機能することを実行する際にスタックにpuhedします。関数b()
が関数a()
を呼び出すと、6行目への参照がスタックにプッシュされます。関数a()
がリターンを実行すると、スタックを調べ、6行目(スタックの最後のエントリ)からコードを実行し続ける必要があることがわかります。そのスタックエントリを削除し、関数b()
からの復帰である6行目の残りのコードの実行を続行するので、スタックをもう一度見て9行目の参照が見つかるので、それを実行し続ける必要があることがわかります。コードを再び9行目から削除し、スタックからそのエントリを削除し、9行目から実行を続けます。
スタックは、関数に渡されるすべての引数の詳細を保持するためにも使用されるため、詳細情報をたくさん保持します。
getTrace()
は、スタック内にある参照点と関数に渡される引数をすべてリストします。
短い答え: 'getTrace()'は、例外が発生したポイントに到達するために渡された関数のリストと、その関数を呼び出したファイルと行を含む配列を返します。詳細については、['debug_backtrace()'](http://php.net/manual/en/function.debug-backtrace.php)関数を参照してください。 – rickdenhaan
なぜグローバルスコープで呼び出されたときに何も返されないのですか? –
スタックとは何ですか? –