Skip to content

Latest commit

 

History

History
60 lines (45 loc) · 2 KB

README.md

File metadata and controls

60 lines (45 loc) · 2 KB

Como implementar Iterators no PHP?

Aqui está um exemplo prático que demonstra como um iterador pode ser útil em um cenário real. Vamos criar um iterador simples para ler e processar linhas de um arquivo grande sem carregar todo o arquivo na memória.

Suponha que você tenha um arquivo de log muito grande chamado "large_log.txt". Em vez de ler o arquivo inteiro de uma vez, usaremos um iterador para ler e processar linha por linha:

class LogFileIterator implements Iterator {
    private $file;
    private $currentLine;
    private $position = 0;

    public function __construct($filename) {
        $this->file = fopen($filename, 'r');
    }

    public function rewind() {
        rewind($this->file);
        $this->position = 0;
        $this->currentLine = fgets($this->file);
    }

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

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

    public function next() {
        $this->position++;
        $this->currentLine = fgets($this->file);
    }

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

    public function __destruct() {
        if ($this->file) {
            fclose($this->file);
        }
    }
}

// Usando o iterador para processar o arquivo de log
$iterator = new LogFileIterator('large_log.txt');

foreach ($iterator as $line) {
    // Processar cada linha do arquivo de log
    echo $line;
}

Neste exemplo, a classe LogFileIterator é um iterador personalizado que lê e processa o arquivo de log linha por linha. Ele evita a necessidade de carregar todo o arquivo na memória e permite que você processe grandes arquivos de log de forma eficiente.

O método __destruct garante que o arquivo seja fechado adequadamente quando o iterador não for mais necessário.

Esse é um exemplo simples de como um iterador pode ser útil em um cenário real, mas em situações mais complexas, você pode personalizar o iterador de acordo com as necessidades específicas de seu projeto.