這就要講到PHP的內建接口Iterator了,PHP5開始支援了接口, 並且內建了Iterator接口, 所以如果你定義了一個類,並實作了Iterator接口,那麼你的這個類別物件就是ZEND_ITER_OBJECT,否則就是ZEND_ITER_PLAIN_OBJECT.
對於ZEND_ITER_PLAIN_OBJECT的類,foreach會透過HASH_OF取得該物件的預設屬性數組,然後對該數組進行foreach.
而對於ZEND_ITER_OBJECT的類對象,則會透過呼叫對象實現的Iterator接口相關函數來進行foreach, 所以, 對於這道筆試題, 可以作如下的答案:
<?php class sample implements Iterator { private $_items = array(1,2,3,4,5,6,7); public function __construct() { ;//void } public function rewind() { reset($this->_items); } public function current() { return current($this->_items); } public function key() { return key($this->_items); } public function next() { return next($this->_items); } public function valid() { return ( $this->current() !== false ); } } $sa = new sample(); foreach($sa as $key => $val){ print $key . "=>" .$val; } ?>
以上是詳解php類別的Iterator模式的範例程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!