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

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

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.