*/ class DAOResultIterator implements \Iterator, \Countable { /** @var DAOResultFactory */ public $_resultFactory; /** @var T Current return value data object. */ public $_current = null; /** @var int $_i 0-based index of current data object. */ public $_i = 0; /** * Create an Iterator for the specified DAOResultFactory. * @param DAOResultFactory $resultFactory */ public function __construct($resultFactory) { $this->_resultFactory = $resultFactory; $this->_current = $this->_resultFactory->next(); } /** * @copydoc \Iterator::current */ public function current(): mixed { return $this->_current; } /** * Return the 0-based index for the current object. * Note that this is NOT the DataObject's ID -- for that, call * getId() on the current element. * * @return int|null */ public function key(): mixed { if (!$this->_current) { return null; } return $this->_i; } /** * @copydoc \Iterator::next() */ public function next(): void { $this->_current = $this->_resultFactory->next(); $this->_i++; } /** * Rewind the DAOResultFactory to the beginning. WARNING that this * operation is not arbitrarily supported -- it can only be called * before the first call to `next()`. */ public function rewind(): void { if ($this->_i != 0) { throw new \Exception('DAOResultIterator currently does not support rewind() once iteration has started.'); } } /** * @copydoc \Iterator::valid() */ public function valid(): bool { return ($this->_current !== null); } /** * @copydoc \Countable::count() */ public function count(): int { return $this->_resultFactory->getCount(); } } if (!PKP_STRICT_MODE) { class_alias('\PKP\db\DAOResultIterator', '\DAOResultIterator'); }