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
Petit problème au début de ton post je pense :
RépondreSupprimer"Quel est le point commun point commun entre"
Je ne comprends pas toujours quel est l'intérêt de réécrire des choses qui existent déjà (comme tu le reconnais en fin d'article) dans de nouveaux framework qu'il faut apprendre à maitriser.
Est-ce que tu peux nous faire un peu le point sur l'évolution de tes classes en terme de développement et d'utilisation par la communauté PHP ?
Merci.
@fox074 merci pour la faute de frappe, j'ai corrigé.
RépondreSupprimerJe réécrits uniquement ce qui me permet de rendre le code de mes projets PHP plus concis et plus lisible. Je considère que ce n'est pas toujours le cas avec des frameworks PHP existants ou avec les fonctions natives du langage. Maintenant, si un framework propose une approche similaire, je suis preneur d'information.
Ce billet est une réflexion personnelle sur l'évolution de ma pratique de PHP. Cela ne va pas plus loin. Je mets à disposition cette série de classes sur github, qui veux s'en sert.