lines = explode("\n", $data); $this->linesLength = count($this->lines); $this->generator = $this->lineGenerator(); } public function get(): \Generator { return $this->generator; } protected function lineGenerator(): \Generator { $lastLineIndex = $this->linesLength - 1; $lastLineBeforeFinalNewLineIndex = ($this->lines[$lastLineIndex] === '') ? $lastLineIndex - 1 : $lastLineIndex; foreach ($this->lines as $lineNumber => $line) { $this->_lastLine = ($lineNumber === $lastLineIndex); $this->_lastLineBeforeFinalNewLine = ($lineNumber === $lastLineBeforeFinalNewLineIndex); yield $lineNumber + 1 => $line; $this->_firstLine = false; } } }