/ Gists / PHP iterator (Record OOP class)
On gists

PHP iterator (Record OOP class)

PHP

Record1.php Raw #

<?php

class Record {
    private $data = [];
    private $currentIndex = 0;

    public function addRecord($value) {
        $this->data[] = $value;
    }

    public function getRecord() {
        if ($this->currentIndex < count($this->data)) {
            $record = $this->data[$this->currentIndex];
            $this->currentIndex++;
            return $record;
        } else {
            return null;
        }
    }
}

// Vytvoření instance třídy
$recordKeeper = new Record();

// Přidání záznamů
$recordKeeper->addRecord("John");
$recordKeeper->addRecord(30);
$recordKeeper->addRecord("New York");

// Získání a postupné procházení všech záznamů pomocí cyklu foreach a metody getRecord()
echo "All records:<br>";
while ($record = $recordKeeper->getRecord()) {
    echo $record . "<br>";
}

Record2.php Raw #

<?php 

/* loop with foreach , works < PHP 8*/

class Record implements IteratorAggregate {
    private $data = [];

    public function addRecord($value) {
        $this->data[] = $value;
    }

    public function getIterator() {
        return new ArrayIterator($this->data);
    }
}

// Vytvoření instance třídy
$recordKeeper = new Record();

// Přidání záznamů
$recordKeeper->addRecord("John");
$recordKeeper->addRecord(30);
$recordKeeper->addRecord("New York");

// Použití cyklu foreach na třídě Record
echo "All records:<br>";
foreach ($recordKeeper as $record) {
    echo $record . "<br>";
}

Record3.php Raw #

<?php

/* PHP 8+ returntype... */

class Record implements IteratorAggregate {
    private $data = [];

    public function addRecord($value) {
        $this->data[] = $value;
    }

    #[\ReturnTypeWillChange]
    public function getIterator() {
        return new ArrayIterator($this->data);
    }
}

// Vytvoření instance třídy
$recordKeeper = new Record();

// Přidání záznamů
$recordKeeper->addRecord("John");
$recordKeeper->addRecord(30);
$recordKeeper->addRecord("New York");

// Použití cyklu foreach na třídě Record
echo "All records:<br>";
foreach ($recordKeeper as $record) {
    echo $record . "<br>";
}