我有一个对象,实现了 ArrayAccess, 迭代可数.生产的几乎完美的列掩蔽。我可以访问有抵消($object[foo]),我可以把它扔到一个 foreach-循环,和许多其他的事情。

但是什么我不能做的就是给它的阵地迭代的职能(next(), reset(), current(), key()),即使我们实现所需要的方法从迭代器。PHP似乎顽固地试图迭代过其成员的变量,并且完全无视的迭代方法.

是有一个接口,将钩的对象的其余阵列-穿功能,还是我坚持与我有什么?

更新: IteratorAggregate似乎并不是答案。虽然这是用在 foreach-循环,基本阵列迭代的功能不调的方法。

有帮助吗?

解决方案

最近在PHP变化防止ArrayIterators形式被使用标准数组函数(复位,下,等等)。

操纵

此应该尽快恢复: http://news.php.net/php.internals/42015

其他提示

要得到这个工作的一种方法是定义在一个单独的类你自己的迭代,然后告诉你的主类,而不是使用默认的一个新的迭代器。

class MyIterator implements Iterator {
  public function key() {
    //
  }

  public function rewind() {
    //
  }

  // etc.

}

class MyMainClass implements IteratorAggregate {
  private $_data = array();

  // getIterator is required for the IteratorAggregate interface.
  public function getIterator() {
    return new MyIterator($this->_data);
  }

  // etc.

}

然后你需要,你应该有尽可能多的控制。 (你可以重复使用跨多个类别自己MyIterator)。

没有测试以上进行,但原理是正确的,我相信。

希望这有助于!

ArrayIterator 不是你要找什么对于?或约 ArrayObject的,这似乎是SPL的接口是什么为你想达到的目标。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top