Après avoir présenté des classes PHP comme PQO, CMD et PSO, voici un billet qui tente de les mettre en perspective à l'aide d'une question. Quel est le point commun entre :
- exécuter une requête SQL
- exécuter une commande système
- découper une chaîne de caractères en petits bouts
- lire le contenu d'un fichier ?
Avez-vous trouvé ? Et bien, si toutes ces opérations sont différentes, l'obtention du résultat de chaque traitement peut être obtenu suivant une interface unique :
interface Fetchor { public function map($f); public function fetch(); public function fetchAll(); public function close(); }
Démonstration
$s = PSO::factory('Hello,How,Are,You,Today')->setEnding(','); $s->map(function($e) { echo $e, PHP_EOL; }); $s = PQO::factory('SELECT title, description FROM posts')->fire(); $s->map(function($e) { echo $e->title, PHP_EOL; }); $s = CMD::factory('/bin/ls')->param('/tmp')->fire(); $s->map(function($e) { echo $e, PHP_EOL; }); $s = PIO::factory('/etc/passwd'); $s->map(function($e) { echo $e, PHP_EOL; });
Maintenant, si votre PHP ne supporte pas les fonctions anonymes, aucun problème :
while($e = $s->fetch()) { echo $e, PHP_EOL; });
Rien de neuf
Bien sur uniformiser le parcours d'un jeu de résultat n'est pas une idée neuve. PHP propose notamment StreamWrapper qui propose comme méthode pivot la lecture de fichier façon C : fopen, fread, fclose. A chacun son style ...
Téléchargement et code source
Le code source est disponible sur GitHub : http://github.com/touv/plor
ou on peut directement l'installer avec PEAR en s'abonnant au Channel Respear :
% pear channel-discover pear.respear.net % pear install respear/plor