对于这种类型的“标准”问题,使用SPL
类的拳头,bravo。我经常看到没有经验的/拙劣的开发人员(甚至是那些根本没有想到的好开发人员)在这些情况下重新发明轮子。
您错过了一些关于iterator
接口实施的非常重要的细节。
有关更多信息,请参阅PHP:Iterator - Manual以及参考实施。
首先,您需要实现,rewind, current, key, next, and valid
函数。参考实现是这样的:
class myIterator implements Iterator {
private $position = 0;
private $array = array(
"firstelement",
"secondelement",
"lastelement",
);
public function __construct() {
$this->position = 0;
}
function rewind() {
var_dump(__METHOD__);
$this->position = 0;
}
function current() {
var_dump(__METHOD__);
return $this->array[$this->position];
}
function key() {
var_dump(__METHOD__);
return $this->position;
}
function next() {
var_dump(__METHOD__);
++$this->position;
}
function valid() {
var_dump(__METHOD__);
return isset($this->array[$this->position]);
}
}
)
而对于遍历实现代码如下所示:
$it = new myIterator;
foreach($it as $key => $value) {
var_dump($key, $value);
echo "\n";
}
使用'while'圈更是一个C风格的迭代器比你想的迭代器。你需要实现['Iterator'方法](http://php.net/manual/en/class.iterator.php),然后应该使用foreach循环。 –
您是否试图迭代'$ news'对象中的公共属性? – halfer