PHP:我怎么知道函数的调用者?

问题描述:

我如何知道在PHP函数的调用者?PHP:我怎么知道函数的调用者?

+0

[PHP:朋友类和非语言调用者函数/类]的可能重复(http://*.com/questions/2528671/php-friend-classes-and-ungreedy-caller-function-class)和[a情侣](http://*.com/search?q=debug_backtrace+php)。您还应该通读[生产代码中的PHP debug_backtrace?](http://*.com/questions/346703/php-debug-backtrace-in-production-code) – Gordon 2010-07-25 20:56:29

不知道为什么你会关心这个,但你可以从debug_backtrace()函数中得出结论。

+2

这在日志记录功能中相当常见,而不是必须通过'__FILE__'和'__LINE__'等。 – MrWhite 2010-07-25 20:52:45

+0

@ w3d好点。没想到这一点。 – 2010-07-25 20:54:06

+0

@ w3d这是一个相当普遍的代码味道。 – Gordon 2010-07-25 21:02:04

我不知道你为什么要这样,但让我提出一个巨大的红色旗帜 - 写代码,其行为取决于来电者产生非常非模块化,难以调试和彻头彻尾的疯狂计划。这就是说,如果你有一个正当的理由,像...

function caller() 
{ 
    $stackTrace = debug_backtrace(); 
    if (count ($stackTrace) < 1) 
    return "None"; 
    else if (count ($stackTrace) < 2) 
    return "Global scope " . $stackTrace[count($stackTrace)]["file"]; 
    else 
    return $stackTrace[count($stackTrace) - 1]["function"]; 
} 

(这被注销的袖口,所以可能不会在所有情况下的鲁棒性。见http://uk3.php.net/manual/en/function.debug-backtrace.php更多)

我怎么知道在PHP函数的调用者?

将它传递给被调用者。这是最正常的方法。

+0

你是用“(这个)”还是其他类型? – ubiquibacon 2010-07-25 21:11:02

+1

@用'$ this','__FUNCTION__','__CLASS__',不管你在被调用者需要什么,只要不用'debug_backtrace'去做,除非你需要回溯。 – Gordon 2010-07-25 21:12:50