FILTRER, METTRE EN CACHE OU MAPER, OU TRIER UN ITERATEUR
LocalStone
Messages postés514Date d'inscriptionmercredi 19 mars 2003StatutMembreDernière intervention 1 mars 2009
-
5 juin 2008 à 20:26
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 2012
-
8 juin 2008 à 17:47
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 8 juin 2008 à 17:47
c'etait essentiellement pour la factory du listeur de dossiers.
setFileClass (string class_name="SplFileObject")
setInfoClass (string class_name="SplFileInfo")
t'as juste ca, mais tu ne peux pas mettre de factory, or perso, j'ai des classes qui lisent les attributs de mes fichiers (lire les tags d'un mp3, le type d'un fichier source, la playliste d'un m3u, les exif d'une image, les donnees d'un ini, de quoi lire un csv, etc...) et pour la classe de la SPL, on ne peut pas distinguer un .mp3 d'un .ini... (sauf en faisant des filterIterators)
on en avait deja parle sur le forum il y a quelques temps.
pour le reste, ils n'ont pas de classe abstraite Proxy, qui soit parente a map, filter, limit, et recursive.
ils ne font pas la distinction entre les iterateurs finnis et infinis.
Ensuite, perso j'aime bien l'idee que ca soit les elements qui soient filtrables ou non, et pas l'iterateur qui filtre n'importe quoi avec un callback (ou non d'ailleur)
idem pour le tri.
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 8 juin 2008 à 14:23
Hello coucou,
même si, pour être franc, je comprends mal pourquoi tu as décidé de réécrire la SPL (à mon avis tu devrais l'expliquer, d'ailleurs), c'est quand même un boulot énorme. Et c'est très bien codé; Bravo :-) 10.
Morphinof
Messages postés255Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention 9 août 20134 6 juin 2008 à 10:21
Vi c'est sur, le mieu restant l'arbre binaire équilibré pour arriver à N*log(N), mais bon N*N c'est un complexité acceptable sauf si on traite vraiment beaucoup de données ^^
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 6 juin 2008 à 10:15
throw new OMGException();
:) localstone va se regaler avec mes conventions de nomages XD
Morphinof, c'est un truc assez interessant cet arbre de recherche, mais pour les perfs, je ne suis pas sur qu'il soit si bon... car en generale, on traite des listes quasiment triees, et pour une liste triee, il est en N*N... (le Qsort est en N * log(N) )
Morphinof
Messages postés255Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention 9 août 20134 6 juin 2008 à 10:04
Je chipotes ;)
if(!function_exists($a)) throw new blablala ^^
En tout cas je me régales je vais certainement utiliser l'arbre binaire :)
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 6 juin 2008 à 09:56
non, ca plante :)
c'est sur le proxyclass, ca... si tu fais $o=new ... ; $o->call_fonction_qui_nexiste_pas, ca plante aussi hein :)
ca te fait un fatal_error, avec ma classe, comme sans ma classe de toute facon...
Morphinof
Messages postés255Date d'inscriptionvendredi 20 avril 2007StatutMembreDernière intervention 9 août 20134 6 juin 2008 à 09:46
Un sacré package très instructif ! J'aime beaucoup ;)
En survolant vite fait le code je suis tombé la dessus :
public function __call($a, $b){
$o=$this->target;
return call_user_func_array( array($o, $a), $b);
}
si on appelle une fonction qui n'existe pas y'a pas d'exception :p
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 5 juin 2008 à 20:51
merci
pour les noms, c'est un de mes defauts, je corrigerais ca quand la debian testing sera passee a php5.3, histoire que je puisse profiter des namespaces.
LocalStone
Messages postés514Date d'inscriptionmercredi 19 mars 2003StatutMembreDernière intervention 1 mars 2009 5 juin 2008 à 20:26
J'aime bien ta source parce que ça me rappelle le Java pour certains aspects ... Et j'aime bien le Java :P !
Par contre, il y a un petit truc qui me dérange ... J'avoue que j'ai pas regardé les 30 classes, mais c'est au niveau de tes conventions de code : parfois c'est en anglais, parfois c'est en français, parfois les noms de classes ne sont pas complet et parfois si (FinIterator ... Pourquoi pas FiniteIterator ou équivalent ...).
Vu l'ampleur de la source, ça mériterait d'être plus stricte et plus rigoureux ... Mais en même temps, je ne suis pas un pro !
8 juin 2008 à 17:47
setFileClass (string class_name="SplFileObject")
setInfoClass (string class_name="SplFileInfo")
t'as juste ca, mais tu ne peux pas mettre de factory, or perso, j'ai des classes qui lisent les attributs de mes fichiers (lire les tags d'un mp3, le type d'un fichier source, la playliste d'un m3u, les exif d'une image, les donnees d'un ini, de quoi lire un csv, etc...) et pour la classe de la SPL, on ne peut pas distinguer un .mp3 d'un .ini... (sauf en faisant des filterIterators)
on en avait deja parle sur le forum il y a quelques temps.
pour le reste, ils n'ont pas de classe abstraite Proxy, qui soit parente a map, filter, limit, et recursive.
ils ne font pas la distinction entre les iterateurs finnis et infinis.
Ensuite, perso j'aime bien l'idee que ca soit les elements qui soient filtrables ou non, et pas l'iterateur qui filtre n'importe quoi avec un callback (ou non d'ailleur)
idem pour le tri.
8 juin 2008 à 14:23
même si, pour être franc, je comprends mal pourquoi tu as décidé de réécrire la SPL (à mon avis tu devrais l'expliquer, d'ailleurs), c'est quand même un boulot énorme. Et c'est très bien codé; Bravo :-) 10.
6 juin 2008 à 10:21
6 juin 2008 à 10:15
:) localstone va se regaler avec mes conventions de nomages XD
Morphinof, c'est un truc assez interessant cet arbre de recherche, mais pour les perfs, je ne suis pas sur qu'il soit si bon... car en generale, on traite des listes quasiment triees, et pour une liste triee, il est en N*N... (le Qsort est en N * log(N) )
6 juin 2008 à 10:04
if(!function_exists($a)) throw new blablala ^^
En tout cas je me régales je vais certainement utiliser l'arbre binaire :)
6 juin 2008 à 09:56
c'est sur le proxyclass, ca... si tu fais $o=new ... ; $o->call_fonction_qui_nexiste_pas, ca plante aussi hein :)
ca te fait un fatal_error, avec ma classe, comme sans ma classe de toute facon...
6 juin 2008 à 09:46
En survolant vite fait le code je suis tombé la dessus :
public function __call($a, $b){
$o=$this->target;
return call_user_func_array( array($o, $a), $b);
}
si on appelle une fonction qui n'existe pas y'a pas d'exception :p
5 juin 2008 à 20:51
pour les noms, c'est un de mes defauts, je corrigerais ca quand la debian testing sera passee a php5.3, histoire que je puisse profiter des namespaces.
5 juin 2008 à 20:26
Par contre, il y a un petit truc qui me dérange ... J'avoue que j'ai pas regardé les 30 classes, mais c'est au niveau de tes conventions de code : parfois c'est en anglais, parfois c'est en français, parfois les noms de classes ne sont pas complet et parfois si (FinIterator ... Pourquoi pas FiniteIterator ou équivalent ...).
Vu l'ampleur de la source, ça mériterait d'être plus stricte et plus rigoureux ... Mais en même temps, je ne suis pas un pro !