我收到了这个通知:
ArrayIterator::next(): 数组在对象外部被修改,内部位置在 /var/www 中不再有效...
这是由这段代码在 foreach 循环开始时生成的。与通知一起,foreach 循环重新开始迭代。换句话说,只要发生这种情况,内部位置就会被重置。但根据 php 手册,ArrayObject 默认使用 ArrayIterator。
手册上说的是关于 ArrayIterator
此迭代器允许在迭代数组和对象时取消设置和修改值和键。
我在这里错过了什么吗?我发现了一些关于 ArratIterator 的错误报告,但不是这种。这是一个错误还是我的坏?
版本:PHP 版本 5.3.10-1ubuntu3.4
<?php
//file 1:
// no namespace
abstract class holder extends \ArrayObject{
// abstract function init();
public function __construct($init){
parent::__construct($init, 1);
}
}?>
<?php
//file 2:
namespace troops;
class holder extends \holder{
public function __construct(){
parent::__construct($this->init());
}
private function init(){
return array( /*... some data from db ...*/ );
}
public function saveData(){
foreach($this as $k => $v){
$this->save($v);
if($v->number_of_items==0) {
unset($k);
// $this->offsetUnset($k); // tryed both
}
}
}
}
?>