2016-03-10 92 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 
} 

回答上面还提供链接到一个补丁。