Lorsque vous faites un fopen(), ou toute autre fonction équivalente, PHP vous retourne une ressource, sous forme d'un flux. Il existe différent types de flux en PHP :
Bref, il y en a pas mal...
Mais on oublie souvent qu'on peut aussi ajouter ses propres types de flux. Par exemple je vais créer un type de flux "twitter" pour lire mes tweets :
Plutôt que d'implémenter toutes les méthodes de ce prototype, concentrons nous sur le principal, et créons 4 méthodes :
stream_open(), qui va ouvrir notre flux
stream_close(), pour le fermer
stream_read($size) qui va être appelée à chaque lecture dans le flux
stream_eof(), pour indiquer qu'on arrive à la fin
Pour simplifier l'exemple, le flux Twitter est en lecture seule. Pour la même raison, on va rapatrier tous les tweets d'un coup et les stocker dans notre objet dans un tableau.
Pour démarrer, créons une petite fonction qui va aller chercher les tweets d'un utilisateur donné :
Maintenant le gestionnaire de flux :
Rien de bien compliqué. Il faut juste bien penser à lancer un warning en cas de problème...
Et ça suffit :
Pratique non ?
Bon, bien sûr l'exemple est trivial, ne serait-ce parce que les tweets peuvent dépasser les 140 caractères à cause des liens ; mais je pense que vous aurez compris l'intérêt de la chose :-)
Appliquer des fitres sur des flux
Autre "truc pratique" assez peu utilisé mais vraiment utile : on peut appliquer des filtre sur des flux, même sur les flux "natifs".
Par exemple, je veux convertir le texte que j'écris dans un fichier en l33t, en utilisant cette fonction :
Nous allons enregistrer le filtre "l33t" et l'associer à la classe "l33t_filter' :
Cette classe l33t_filter doit hériter de la classe native php_user_filter :
On peut par exemple imaginer appliquer des filtres de cryptage, de contrôle...
Alors, convaincu ? :-) Avez-vous déjà utilisé votre propres flux ou filtre de flux en PHP ?