在PHP中获取函数调用者的__FILE__常量

Car*_*ers 12 php

我知道__FILE__PHP中的魔术常量将变成当前正在执行的文件的完整路径和文件名.但有没有办法可以为函数的调用文件获取相同的信息?例如:

//foo.php:
include "bar.php";
call_it();

//bar.php
function call_it() {
    echo "Calling file: ".__CALLING_FILE__;
}
Run Code Online (Sandbox Code Playgroud)

哪个会输出Calling file: ....../foo.php.

我知道没有__CALLING_FILE__神奇的常数,或者一个神奇的常数来处理这个问题,但有没有办法可以获得这些信息?最不讨人喜欢的解决方案是理想的(例如,使用堆栈跟踪将非常hacky)但最终我只需要它工作.

Rag*_*geZ 28

你应该看看堆栈跟踪来做这些事情.PHP有一个叫做的函数debug_backtrace

include "bar.php";
call_it();

//bar.php
function call_it() {
   $bt =  debug_backtrace();

   echo "Calling file: ". $bt[0]['file'] . ' line  '. $bt[0]['line'];
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你

根据您可能会发现debug_print_backtrace有用的相同原则,它执行相同的操作,但php会自行处理所有信息的格式化和打印.