對於這種類型的「標準」問題,使用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