A la découverte de la SPL: SplFileObject

La SPL, ou Standard PHP Library, est un ensemble de classes disponibles dans PHP qui regroupe bon nombre de fonctionnalités fort utiles, mais souvent méconnues. Prenons par exemple aujourd’hui SplFileObject. Cette classe facilite l’itération sur le contenu d’un fichier en mettant à notre disposition un… itérateur (dingue ça).

Exemple: disons qu’on a un fichier /tmp/foobar.csv avec le contenu suivant:

foo;bar
baz;quux

Nous pouvons simplement parcourir les lignes avec le code suivant:

<?php

$file = new SplFileObject('/tmp/foobar.csv');

foreach($file as $line)
{
  $data = explode(';', $line);
}

C’est pas mal non ?

On pourra arguer qu’on arrive au même genre de résultat en utilisant file, mais l’empreinte mémoire est loin d’être la même (sans compter l’approche object de SplFileObject qui va nous permettre plus tard de faire des trucs rigolos).

Mais il y a encore mieux. SplFileObject gère le format CSV, de deux manières différentes. Vous pouvez au choix utiliser SplFileObject#fgetcsv ou bien (pour garder une API cohérente) expliquer à SplFileObject que le fichier que vous traitez est un CSV.

Attardons nous sur cette dernière méthode (toujours avec le même /tmp/foobar.csv):

<?php

$file = new SplFileObject('/tmp/foobar.csv');
$file->setFlags(SplFileObject::READ_CSV);
$file->setCsvControl(';');

foreach($file as $data)
{
  var_dump($data);
}

Magique !

Vous pouvez bien évidemment (comme on le disait plus haut) surclasser SplFileObject pour lui ajouter tout un tas de trucs rigolos (par exemple chez nous on détecte les BOM, et on configure automatiquement les fichiers CSV).

Bien sur, SplFileObject permet bien d’autres choses, quasiment tout ce que vous pouvez faire avec les fonctions utilisant un handler fopen est disponible (à quelques exceptions près, comme par exemple fread) (globalement c’est assez orienté lecture ligne par ligne).

 

Serv-Tech

 

Laisser un commentaire