05 mai 2011

PSOStream, string et stream enfin réuni

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