2016-03-10 93 views
0

我有一個奇怪的行爲與PHP腳本的一節(更確切地說是一個條件語句)。調試和執行不同PHP XDebug

當在XDebug(phpStorm)條件的確切行上使用斷點時,腳本按預期執行。相反,當正常執行或在其他任何地方(括號之前或之內)破壞時,假定的真實條件被跳過。

if($interval > $maxCovering) //2 DateInterval objects - break here and it works 
{ 
    //Do something - never reached on standard execution 
} 

我試着在行前暫停執行,它沒有幫助。此外,我做了一些研究,並就PHP的這個問題提出了空洞。

什麼會導致這種行爲,有哪些補救措施?

EDIT 這些都是典型的日誌: 「最大」和「間」是參數和「COMPAR」是比較 第2行是執行斷點和最後2而不

enter image description here

+0

打印兩個變量的值以進行調試。也許使用和不使用斷點之間的區別很明顯。 – RhinoDevel

+2

在比較之前,您是否嘗試過將變量值記錄到文件中?運行時的差異(特別是如果根本沒有加載xdebug擴展)可以使整體不同(xdebug,即使你沒有調試,但只是加載了擴展,使你的代碼變得更慢) – LazyOne

+0

@RhinoDevel謝謝你的提示!我發佈了日誌。 – user3311142

回答

0

這裏的問題不是由PhpStorm或XDebug引起的,而是由DateInterval類引起的,除非首先進行評估,否則該類不具有可比性。這是一個已知問題:SO question on the topic
修補的問題,我用非常不雅的解決方案的比較之前人爲地評價它,所以代碼變成:質疑引述

var_dump($interval); 
var_dump($maxCovering); 
if($interval > $maxCovering) //2 DateInterval objects 
{ 
    //Do something 
} 

回答上面還提供鏈接到一個補丁。