這就要講到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
public function rewind()
public function current()
public function key()
public function next()
public function valid()
}$sa = new sample();
foreach($sa as $key => $val)
?>
設計模式 Iterator模式
迭代器模式,主要用於容器裡面元素的遍歷,其他地方用到的不多,這裡舉個例項,模仿jdk裡面迭代器的實現,當然我這裡並沒有把iterator方法抽象到iterable這個介面中,依據介面的設計原則,不要做乙個面面俱到的介面,而應該讓特定的介面完成特定的功能 以下是 示例,使用了之後,我們在測試 中,僅僅...
Java迭代模式(Iterator模式)
上了這麼多年學,我發現乙個問題,好象老師都很喜歡點名,甚至點名都成了某些老師的嗜好,一日不點名,就飯吃不香,覺睡不好似的,我就覺得很奇怪,你的課要是講的好,同學又怎麼會不來聽課呢,殊不知 誤人子弟,乃是犯罪!啊。好了,那麼我們現在來看老師這個點名過程是如何實現吧 1 老規矩,我們先定義老師 teac...
Java迭代模式(Iterator模式)
上了這麼多年學,我發現乙個問題,好象老師都很喜歡點名,甚至點名都成了某些老師的嗜好,一日不點名,就飯吃不香,覺睡不好似的,我就覺得很奇怪,你的課要是講的好,同學又怎麼會不來聽課呢,殊不知 誤人子弟,乃是犯罪!啊。好了,那麼我們現在來看老師這個點名過程是如何實現吧 1 老規矩,我們先定義老師 teac...