关于在使用foreach
时操纵数组的安全隐患,有很多问题。但是,我无法在while循环中找到任何问题。
所以我想知道,这样做是否安全?下面是PHP中的示例脚本,我不确定这是否正常。
while ($item = array_pop($array)) {
findMoreItems($item, $array);
}
function findMoreItems($item, &$array) {
// Returns null if no more items are found
$newItem = someFuncFromServer($item);
if ($newItem) {
array_push($array, $newItem);
}
}
安全我的意思是:我可以确定循环中没有跳过任何项目吗?
答案 0 :(得分:1)
您的代码基本上等同于:
$item = array_pop($array);
while ($item) {
findMoreItems($item, $array);
$item = array_pop($array)
}
function findMoreItems($item, &$array) {
// Returns null if no more items are found
$newItem = someFuncFromServer($item);
if ($newItem) {
array_push($array, $newItem);
}
}
现在如果你以上面的方式重写它,很明显代码不会做任何像复制引用或数组点或类似foreach
那样的事情。 foreach
这样做是因为它依赖于array_pop
和array_push
没有的内部数组指针。