PHP7.2奇怪的in_数组行为

PHP7.2奇怪的in_数组行为,php,php-7.2,Php,Php 7.2,我从PHP5升级到7.2,在本地没有问题(需要做一些更改,但解决了) 我的一个函数在生产服务器中不工作。 代码如下所示: $someBool = in_array($some, array("asd", "fgh", "etc")); 如果我对此进行var_转储,结果未知:0,但如果我在该值正下方进行var转储(转储之前没有任何If站),则函数正常工作,结束转储结果将为bool(true)或bool(false) (我不覆盖此变量) 同样,如果我对var_转储行进行注释,则该函数工作不正确 有

我从PHP5升级到7.2,在本地没有问题(需要做一些更改,但解决了)

我的一个函数在生产服务器中不工作。 代码如下所示:

$someBool = in_array($some, array("asd", "fgh", "etc"));
如果我对此进行var_转储,结果未知:0,但如果我在该值正下方进行var转储(转储之前没有任何If站),则函数正常工作,结束转储结果将为bool(true)或bool(false)

(我不覆盖此变量)

同样,如果我对var_转储行进行注释,则该函数工作不正确

有谁知道是什么导致了这种行为? 谢谢你的帮助

在原始函数中:

$needCmdText = in_array($fieldName,array(
        'cmdpreid','cmdpostid','cmdskipid',
        'cmdfixid','cmdexpid','cmdsysid'
    ));
其中,$fieldName始终是来自客户端的“cmdexpid”。(在我的测试用例中)
一个有趣的消息,一个简单的回音也解决了这个问题,但它应该在这下面

我将PHP7.2改为7.1,在不更改任何代码的情况下解决了问题。(无需转储,即可解决)


我认为PHP7.2中有一个奇怪的bug,它在windows环境中没有出现

这个问题缺少如何产生“结果”的代码。您希望我们知道您的代码而不与您共享吗?我们不知道未知:0可能来自何方。如果说
var_dump()
改变了其他代码的行为,那就错了99.9999%。代码很简单,这没有什么神奇之处。我简单地调用in_数组,它不返回bool。它为我做:[no$some][with$some],所以肯定有不同的东西。如果我看不到,我也不相信,但我只取消注释并注释var_转储,这会使结果不同。如果在var_转储和in_数组之间有更多行(一些If),则var_转储结果未知:0,这是in_数组的结果。由于var转储,一些行为发生了变化,这是肯定的。那么,您最终会显示您的代码是有效的还是无效的?当我们不知道你写了什么的时候,我们应该如何帮助你呢?我怀疑这里面有漏洞。您没有发布一行相关代码,即如何获得
$fieldName
的值。降级不是解决办法。认为它不会在Windows上发生并不是一个解决方案。你有一个小精灵潜伏着,它会再次咬你。$fieldName是数组中的字符串,为什么仅仅因为我取消了var_转储的注释就要更改它?胡说,我写了所有需要的信息,in_数组不应该返回未知:0(因此它没有像预期的那样返回bool,也没有引发任何异常或错误/警告。但是,可以肯定的是,php7.2中没有任何错误。我无法在任何开发环境中复制此问题,这就是为什么您无法复制两者的原因。产品使用debian,开发在windows下使用xampp,第二个运行良好。我所能想象的一切这是一个奇怪的编码错误。遗憾的是,在windows上开发然后在debian上部署必然会产生生产错误。最好的做法是让您的开发环境与部署环境相同,这就是为什么像
vagrant
这样的工具存在的原因。我不想猜测发生了什么,这个错误看起来像是什么您是在Debian上编译php还是从repo安装的?我是从repo安装的,xdebug没有运行。