Hey
,
Tu es le roi pour demander les informations alors que la documentation est en cours d'écriture toi hein
. Hoa 1.0 va bientôt sortir et la documentation va être totalement refaite exprès mais je vais t'expliquer très rapidement.
Hoa propose un système de flux totalement unifié. Hoa_Stream s'occupe de cette laborieuse tâche. Dans Hoa_Stream, on trouve les interfaces Hoa_Stream_Interface_*, dont Hoa_Stream_Interface_In et Hoa_Stream_Interface_Out, respectivement pour des flux de lecture ou d'écriture.
On trouve alors tout plein de flux primitifs, comme Hoa_File, Hoa_Socket etc.
Pour le premier, on trouve les enfants Hoa_File_Read, Hoa_File_Write et Hoa_File_ReadWrite par exemple (on en trouve beaucoup d'autres mais j'ai dit que je faisais rapidement
).
Enfin, on trouve une autre catégorie de flux, les flux dits composites, comme Hoa_Xml. Tiens, ça devient très intéressant
.
Pourquoi un flux composite ? Hoa_Xml permet de lire des documents XML, de les manipuler comme des flux, on trouve Hoa_Xml_Read, Hoa_Xml_Write et Hoa_Xml_ReadWrite par exemple. Sauf que le document XML, il vient d'où ? D'un fichier ? D'une socket ? On comprend que Hoa_Xml a besoin de travailler sur un flux, il a besoin d'être composé d'un flux, c'est donc un flux composite.
C'est pourquoi on va commencer par ouvrir un fichier en lecture seule par exemple :
import('File.Read') and load();
$file = new Hoa_File_Read('Foobar.xml');
Ensuite, on veut interpréter le contenu du fichier comme étant de l'XML, alors :
import('Xml.Read') and load();
$xml = new Hoa_Xml_Read($file);
Et le tour est joué.
Sauf que, Hoa_Xml, en plus d'être un flux composite, est un flux structurel. C'est à dire qu'il manipule une structure, comme un arbre. Il implémente donc l'interface Hoa_Stream_Interface_Structural. On trouve alors des méthodes comme selectChildElements(). Tu peux alors faire :
foreach($xml->selectChildElements() as $child)
var_dump($child->getName());
Tous les éléments XML héritent de Hoa_Xml_Element_Basic, où tu as des méthodes comme readAttribute(), readAttributes(), readAttributeAsList() ou ce genre de chose. Je t'invite à regarder le code, il est clair et facile à lire, ainsi que le code des interfaces de flux.
Une chose en plus, si tu utilises Hoa_Xml_Read, alors les éléments XML seront du type Hoa_Xml_Element_Read (qui étend Hoa_Xml_Element_Basic), donc les élément sont eux-mêmes des flux ! Imagines faire :
$element->readAll()
// ou
$element->readInteger()
Ça devient intéressant
.
Est-ce déjà un brin plus clair ?
L'avantage, c'est que les méthodes sur les flux sont strictement le mêmes quelque soit le flux que tu manipules. Ainsi, tu peux donner une socket à Hoa_Xml, ce sera pareil. Si tu manipules Hoa_Json, Hoa_File, Hoa_Socket, Hoa_Websocket, Hoa_Xml ou je ne sais quoi, ce sera toujours les mêmes interfaces donc les même méthodes. Tu peux interchanger tes flux entre eux, le code fonctionnera toujours.
T'en penses quoi ?
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »