(底部的例子!!!)
我们刚刚将后端升级到PHP7,之后,我们在代码中发现了一个与ArrayObject相关的错误.
代码只是循环遍历Object的一个副本(类型为native ArrayObject).foreach按值迭代.
代码的目的是过滤一些您不需要的值.在示例中,如果迭代值为"2"或"3",则取消设置.我已经尝试使用迭代器而不是复制的值而没有迭代器.
结果:
第一个循环=> $ key = 0,$ value ="one"//继续
第二个循环=> $ key = 1,$ value ="second"//未设置
第三循环=> $ key = 3,$ value ="四"// WTF?哪里是$ key = 2,$ value ="三"????
所以我无法理解发生了什么.我们的时间解决方案是迭代原始对象并从副本中取消设置.有谁知道PHP核心(或ArrayObject/ArrayIterator)中的哪个更改?我有搜索它,但有些人有foreach这个问题,迭代的项目是参考.
如果在PHP 5.6和7之间切换,则行为会发生变化.
$elements = new ArrayObject();
$elements->append('one');
$elements->append('two');
$elements->append('three');
$elements->append('four');
print_r($elements);
$clone = clone $elements;
$it = $clone->getIterator();
echo "\n------\n";
foreach ($it as $key => $value) {
echo $key."\t=>\t".$value."\n";
if ($value …Run Code Online (Sandbox Code Playgroud)