How can a PHP developer effectively utilize the Traversable interface in PDOStatement?

When working with PDOStatement in PHP, a developer can effectively utilize the Traversable interface by implementing a custom iterator that can iterate over the result set returned by a query. By creating a class that implements the Iterator interface and fetching rows one by one from the PDOStatement object, the developer can easily iterate over the result set in a foreach loop.

class PDOResultIterator implements Iterator {
    private $statement;
    private $position = 0;
    private $currentRow;

    public function __construct(PDOStatement $statement) {
        $this->statement = $statement;
    }

    public function rewind() {
        $this->position = 0;
        $this->currentRow = $this->statement->fetch();
    }

    public function valid() {
        return $this->currentRow !== false;
    }

    public function key() {
        return $this->position;
    }

    public function current() {
        return $this->currentRow;
    }

    public function next() {
        $this->position++;
        $this->currentRow = $this->statement->fetch();
    }
}

// Example usage
$pdo = new PDO("mysql:host=localhost;dbname=test", "username", "password");
$statement = $pdo->query("SELECT * FROM users");

foreach (new PDOResultIterator($statement) as $row) {
    echo $row['username'] . "<br>";
}