2014-04-14 58 views
3

我有一段代碼的結構如下。語言異常。好奇跳

if (isset($x)){ 
    error_log("A"); 
    $a = f(); 
    error_log("B"); 
} 
error_log("C"); 

錯誤日誌有條目

A 
C 

我得到的錯誤日誌中沒有其他條目。

我已經將奇怪的行爲縮小到f()中的API調用phpCAS::isAuthenticated(),phpCAS v1.3.2。

這段代碼怎麼可能跳過error_log("B")的呼叫?什麼語言結構允許這個?

+3

沒有允許這種操作的語言結構。我猜你誤解了一些調試輸出。 – hek2mgl

+2

有沒有其他的代碼,例如捕捉異常,帶斷點的開關/循環等等。C日誌可能來自其他地方,例如執行實際上停止在B之前,而另一個會話或部分代碼日誌C? –

+3

你是否排除了'f()'在*'isset($ x)'之前不會導致控制跳回*的可能性,但是在那個過程中'$ x'未被設置?例如,這可能發生在遞歸中。 – kojiro

回答

0

你確定你的日誌'C'真的是這個嗎?如果您的錯誤處理程序尚未提供此信息,則可以登錄FILELINE

如果所有三個日誌真的是那些,你確定你的代碼真的是這樣嗎?在f()的調用之前或之後你有沒有什麼東西?

您可能有一些代碼停用日誌或更改處理程序,然後重新激活或重置舊的處理程序。你可以搜索像「set_error_handler」,「ini_set」,「error_log」等字符串......

如果「f()」使用某些類實例,請查看它們的Class的構造函數和析構函數,而不僅僅是在特定方法調用。