Lendo Arquivos CSV via SplFileObject do PHP

Artigo que explica como utilizar a classe SplFileObject da SPL do PHP para ler arquivos CSV - Comma-Separated Values.

Navegando pelo manual do PHP, encontrei a classe SplFileObject, que permite a manipulação de arquivos através de uma proposta orientada a objetos. Ela extende a classe SplFileInfo, que serve para obter informações sobre o arquivo.

Além dos métodos básicos, que inclusive tem nomes semelhantes aos das funções de mesmo propósito (paradigma procedural), vi que ela oferece uma forma de leitura de arquivos CSV através de um iterador.

Os símbolos usados como delimitador de campos e cerca de valores são especificados uma única vez, e o objeto é percorrido na forma de iterador, de maneira bastante "elegante". Veja o exemplo:

$arq = new SplFileObject('exemplo.csv');
$arq->setFlags(SplFileObject::READ_CSV);
$arq->setCsvControl(',', '"');
foreach ($arq as $linha) {
    ...
}

Apesar de tudo, achei um tanto quanto "mal feita" a classe em si. Primeiro porque o nome de vários métodos começam com "f". Por exemplo "fgets". Tudo bem que a velha função do PHP tem esse nome, mas, ao passar para o paradigma orientado a objetos, precisava mantê-lo? O "f" indica justamente "file" para ser uma possível abreviação de "file get string". Se a classe foi criada para manipular arquivos, entendo que um método "getString" ou "getLine" seria mais conveniente.

A classe também tem o método fstat para obter informações sobre o arquivo. Mas por que este método? A classe já extende a classe SplFileInfo, que é capaz de obter várias informações sobre o arquivo.

Outra questão é que os métodos específicos para manipular CSV poderiam ficar em outra classe que extendesse a SplFileObject. Afinal, arquivo texto é uma coisa, arquivo CSV é outra.

Pelo visto, a proposta dos desenvolvedores foi justamente manter o funcionamento o mais próximo do modo antigo (com funções), mas para qualquer crítico da linguagem, soa um pouco mal algumas decições de projeto. E você, o que pensa disso? Deixe seu comentário.

0 comentários