Il y a bien longtemps déjà, à l'époque où j'ai écrit Pxxo, j'avais cherché à manipuler des buffers qui pouvait être indifféremment en mémoire ou sur disque. Pxxo intègre donc des classes qui implémentent plus ou moins bien cette idée. Jusqu'à récemment, je n'avais plus jamais eu besoin d'un tel mécanisme. Mais voilà qu'au détour d'un besoin fonctionnel, celle-ci réapparaît ...
Cette fois-ci, pas question de développer une myriade de classe. Dans la logique de mes derniers développements, j'ai cherché à interfacer simplement ce que sait faire PHP nativement.
PSOStream
Le principe est de coupler l'usage de la classe PSO et des streams PHP afin de pouvoir utiliser une variable comme on le ferait avec un fichier
$h = fopen('pso://t3', 'w'); fwrite($h, 'azerty'); fclose($h); $h = fopen('pso://t3', 'r'); for($c = ''; !feof($h); $c .= fread($h, 10)); fclose($h); echo $c; // azerty
Rien de neuf ?
Tous les gourous PHP auront reconnu une implémentation légèrement améliorée d'un exemple enfuit dans la documentation. Mais ce qui m'intéresse est ailleurs, c'est le couplage avec la classe PSO :
// Pour lecture $s = new PSO('azerty'); $h = fopen($s->toURL(), 'r'); for($c = ''; !feof($h); $c .= fread($h, 10)); fclose($h); echo $c; // azerty // Pour écriture $s = new PSO(); $h = fopen($s->toURL(), 'w'); fwrite($h, 'azerty'); fclose($h); echo $s; // azerty
Inutile ?
Comme ça, de but en blanc, ça n'a l'air de rien, ça semble ne servir à rien, et ça ne révolutionne pas les usages. Mais dans mon cas très précis, c'est utile et ça rend le code extrêmement lisible. Pour vous en convaincre, je vous invite à attendre mon prochain billet qui je l'espère exposera un cas d'utilisation...
Aucun commentaire:
Enregistrer un commentaire