2010-07-25 71 views
2

我如何知道在PHP函數的調用者?PHP:我怎麼知道函數的調用者?

+0

[PHP:朋友類和非語言調用者函數/類]的可能重複(http://stackoverflow.com/questions/2528671/php-friend-classes-and-ungreedy-caller-function-class)和[a情侶](http://stackoverflow.com/search?q=debug_backtrace+php)。您還應該通讀[生產代碼中的PHP debug_backtrace?](http://stackoverflow.com/questions/346703/php-debug-backtrace-in-production-code) – Gordon 2010-07-25 20:56:29

回答

5

不知道爲什麼你會關心這個,但你可以從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

4

我不知道你爲什麼要這樣,但讓我提出一個巨大的紅色旗幟 - 寫代碼,其行爲取決於來電者產生非常非模塊化,難以調試和徹頭徹尾的瘋狂計劃。這就是說,如果你有一個正當的理由,像...

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更多)

3

我怎麼知道在PHP函數的調用者?

將它傳遞給被調用者。這是最正常的方法。

+0

你是用「(這個)」還是其他類型? – ubiquibacon 2010-07-25 21:11:02

+1

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