diff --git a/Iterator/Iterator.php b/Iterator/Iterator.php new file mode 100644 index 0000000..d27adae --- /dev/null +++ b/Iterator/Iterator.php @@ -0,0 +1,109 @@ +_rowset = new Rowset($this); + } + + public function process() + { + $this->_rowset->process(); + } +} + +class Rowset implements Iterator +{ + protected $_currentRow; + + protected $_file; + + public function __construct($file) + { + $this->_file = $file; + } + + /** + * composite pattern: run through all rows and process them + * + * @return void + */ + public function process() + { + // this actually calls rewind(), { next(), valid(), key() and current() :} + foreach ($this as $line => $row) { + $row->process(); + } + } + + public function rewind() + { + // seek to first line from $this->_file + } + + public function next() + { + // read the next line from $this->_file + if (!$eof) { + $data = ''; // get the line + $this->_currentRow = new Row($data); + } else { + $this->_currentRow = null; + } + } + + public function current() + { + return $this->_currentRow; + } + + public function valid() + { + return null !== $this->_currentRow; + } + + public function key() + { + // you would want to increment this in next() or whatsoever + return $this->_lineNumber; + } +} + +class Row +{ + protected $_data; + + public function __construct($data) + { + $this->_data = $data; + } + + public function process() + { + // do some fancy things here ... + } +} \ No newline at end of file