[php5] naviguer dans une collection à l'aide d'une pseudo syntaxe sql ...

Soyez le premier à donner votre avis sur cette source.

Vue 2 954 fois - Téléchargée 117 fois

Description

Bon ... Alors là, c'est pas gagné pour expliquer le pourquoi du comment de cette source. Déjà, elle est loin d'être terminée. J'ai commencé par étudier ce problème en codant un exemple très simple qui permet de bien appréhender la chose, et c'est cet exemple que je poste maintenant.
J'ai décidé de réfléchir à ce problème en ayant lu un article sur la technologie LINQ que propose le C# dans sa version 3.0. L'idée est de permettre de récuperer des élements à l'interieur de collections (des listes, des tableaux, etc.) en utilisant une syntaxe qui est directement integrée au language et qui reste très proche du SQL (il faut savoir que le SQL, ça fait plus de 30 ans que ça existe, mais on a pas encore trouvé mieux pour manipuler des données).
J'ai pas la prétention d'avoir inventé un nouveau langage que le PHP peut comprendre ou quoi que ce soit ... Disons seulement que je propose une solution qui permet d'acceder directement aux données d'une liste, à l'aide d'une série de méthodes dont le nom ressemblent aux mots clé SQL.
Dans l'exemple que je poste, le problème est simple : on a une liste de nombre complexe et on veut récupérer les 2 premiers nombres de cette liste dont le modulo est plus grand qu'un nombre complexe fixé. Puis, toujours à partir de cette liste, on veut cette fois seulement récupérer les 3 premiers nombres de la liste.

Source / Exemple :


<?php
/* -------------------- */
// On commence par créer la liste : 
   $objComplexNumbers = new jList();
   $objComplexNumbers[] = new ComplexNumber(3, 4);
   $objComplexNumbers[] = new ComplexNumber(1, 2);
   $objComplexNumbers[] = new ComplexNumber(3, 0);
   $objComplexNumbers[] = new ComplexNumber(0, 0);
   $objComplexNumbers[] = new ComplexNumber(0.5, 0.2);
   $objComplexNumbers[] = new ComplexNumber(2, 4);

// Puis on fixe un nombre complexe qui va servir de référence.
   $objFixedComplexNumber = new ComplexNumber(3, 2);

// On peut alors résoudre le premier problème ...
   $objComplexNumbersWithModulusGreaterThanFixedComplexNumber = $objComplexNumbers -> select('*') -> where(new Predicate($objFixedComplexNumber, 'isModulusGreaterThanModulusOf')) -> limit(0, 2);
   echo '<pre>';
   print_r($objComplexNumbersWithModulusGreaterThanFixedComplexNumber);
   echo '</pre>';

// Puis le second ...
   $objFirstThreeComplexNumbers = $objComplexNumbers -> select('*') -> limit(0, 3);
   echo '<pre>';
   print_r($objFirstThreeComplexNumbers);
   echo '</pre>';
/* -------------------- */
?>

Conclusion :


Je le répète une fois de plus, c'est loin d'être terminé ... Par exemple, la méthode select() : pourquoi l'utiliser alors qu'on en a pas besoin ? Et bien on pourrait penser qu'à l'avenir, il y aurait des MultidimentionnalList, par exemple ... Du coup, il risque d'avoir besoin de préciser les dimensions de la liste qui nous interesse ... Ou bien encore, si on fait crée une SQLResultSet qui est un objet issu d'une requête SQL ...
Bref ... Ce code est plus une étude qu'un véritable code, et je compte sur vous pour de nombreux commentaires qui peuvent le faire évoluer ...
LocalStone.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

coucou747
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
26 -
euh... pourquoi pas :)

Personellement, j'avais attaque la lecture d'un fichier CSV, apres la classe de lecture, je m'etais attaque a la classe disons ... d'extraction de donnees, ma classe de gestion du CSV permettait un overloading vers un tableau (enfin ca implementait itterator et arrayacces quoi)
ensuite, j'avais une requete genre :
$req->select(create_function('...', '...'));
$req->where(create_function(...));
$req->orderBy(create_function(...));
$req->limit(...);

c'etait proche du SQL, mais chiant a manipuler, faudrait juste que je fasse des fonctions predeffinies...
malalam
Messages postés
10918
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
Hello,

je n'avais pas encore commenté mais j'avais maté le code : c'est pas mal du tout :-)
L'idée est bonne, la façon de faire pas mauvaise, même si je pense que tu pourrais grandement en améliorer le principe. Tu devrais en effet continuer un peu sur ta voie.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.