57 lines
1.2 KiB
PHP
57 lines
1.2 KiB
PHP
<?php
|
|
/*****************************************************************************
|
|
* CachedPDOIterator.php
|
|
* Contains model class CachedPDOIterator.
|
|
*
|
|
* Based on https://gist.github.com/hakre/5152090
|
|
*
|
|
* Kabuki CMS (C) 2013-2021, Aaron van Geffen
|
|
*****************************************************************************/
|
|
|
|
class CachedPDOIterator extends CachingIterator
|
|
{
|
|
private $index;
|
|
|
|
public function __construct(PDOStatement $statement)
|
|
{
|
|
parent::__construct(new IteratorIterator($statement), self::FULL_CACHE);
|
|
}
|
|
|
|
public function rewind(): void
|
|
{
|
|
if ($this->index === null)
|
|
{
|
|
parent::rewind();
|
|
}
|
|
$this->index = 0;
|
|
}
|
|
|
|
public function current(): mixed
|
|
{
|
|
if ($this->offsetExists($this->index))
|
|
{
|
|
return $this->offsetGet($this->index);
|
|
}
|
|
return parent::current();
|
|
}
|
|
|
|
public function key(): mixed
|
|
{
|
|
return $this->index;
|
|
}
|
|
|
|
public function next(): void
|
|
{
|
|
$this->index++;
|
|
if (!$this->offsetExists($this->index))
|
|
{
|
|
parent::next();
|
|
}
|
|
}
|
|
|
|
public function valid(): bool
|
|
{
|
|
return $this->offsetExists($this->index) || parent::valid();
|
|
}
|
|
}
|