D=c3=a9pendances entre plusieurs classes.

Le
Jean Fran=c3=a7ois Ortolo
Bonjour

Celà relève probablement de l'application du design pattern
'injecteur de dépendances'.

J'ai le minimum :

<?php

class Container {
protected $s=array();
function __set($k, $c) { $this->s[$k]=$c; }
function __get($k) { return $this->s[$k]($this); }
}

?>


Mon problème, est de programmer une petite ORM pour MySQL, avec
seulement du DML ( manipulation de données ).

Mettons, que j'ai la syntaxe suivante ( simple ) :

TABLE('Table')->SELECT('Column1')->WHERE('Column2', '=', $value)->GET();

Qui dit pointeurs, dit classes ( ou array ).

Si classes comment spécifier ces dépendances ?

Merci beaucoup de vos avis et conseils.

Jean François Ortolo
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Miakinen
Le #26442629
Bonjour,
Le 11/08/2017 11:47, Jean François Ortolo a écrit :
[...]
Mettons, que j'ai la syntaxe suivante ( simple ) :
TABLE('Table')->SELECT('Column1')->WHERE('Column2', '=', $value)->GET();
Qui dit pointeurs, dit classes ( ou array ).
Si classes comment spécifier ces dépendances ?


Malheureusement je ne connais pas ce que tu utilises, et je ne sais
donc pas répondre. As-tu trouvé une réponse ? Sinon, il pourra être
judicieux de poser de nouveau la question début septembre, quand la
plupart des vacanciers seront revenus.
--
Olivier Miakinen
Jean Fran=c3=a7ois Ortolo
Le #26442641
Le 23/08/2017 à 22:49, Olivier Miakinen a écrit :
Bonjour,
Le 11/08/2017 11:47, Jean François Ortolo a écrit :
[...]
Mettons, que j'ai la syntaxe suivante ( simple ) :
TABLE('Table')->SELECT('Column1')->WHERE('Column2', '=', $value)->GET();
Qui dit pointeurs, dit classes ( ou array ).
Si classes comment spécifier ces dépendances ?

Malheureusement je ne connais pas ce que tu utilises, et je ne sais
donc pas répondre. As-tu trouvé une réponse ? Sinon, il pourra être
judicieux de poser de nouveau la question début septembre, quand la
plupart des vacanciers seront revenus.


Bonjour Monsieur
C'est la syntaxe de l'ORM Eloquent ( en PHP ).
Je suis en train de mettre la dernière main à ma propre version de et
ORM ( même syntaxe ).
En fait, ces éléments SQL en majuscules, sont ( dans la classe
Database de mon ORM ), des fonctions et non pas des classes.
Ces fonctions sont exécutées l'une après l'autre, de gauche à droite.
J'alimente des array, puis à la fin je reconstitue le SQL résultant,
puis soit preprare() => bindparam() => execute(), soit query() =>
fetchAll() ( ou fetch() ), soit exec().
J'aurai probablement terminé la semaine prochaine.
Très respectueusement.
Jean François Ortolo
Jean Fran=c3=a7ois Ortolo
Le #26443763
Bonjour Monsieur
J'ai terminé peu ou prou mon ORM.
Je suis en train de faire le formulaire de test.
Celui-ci nécessite d'interpréter l'instruction Eloquent entrée dans
le champ de saisie, sous une forme PHP réellement exécutable.
Ci dessous, un exemple de code PHP produit :
/*
* Instanciation
* de l'ORM.
*/
$conn = new Database("");
/*
* Les fonctions
* et arguments sont
* dans des variables.
*/
$conn->$func1($arg1)->$func2($arg2)-$func3($arg3)->$func4($arg4);
les $func sont : 'TABLE', 'SELECT', 'WHERE', et 'GET',
et les $arg sont : "'CHEVAUX'", "'NUMCH', 'NOMCH'", "'NUMCH', 2000",
et "" ( vide ).
Quand je met la fonction eval() à chaque argument, la fonction eval()
rechigne ( à l'exécution ) devant la virgule de l'argument.
Je dispose de tous les arguments des fonctions ( $arg11, $arg21,
$arg22, $arg31, $arg32, et $arg41 ), mais je ne peux pas rédiger le PHP
directement avec ces arguments détaillés, car il y a trop de
possibilités ( nombre de fonctions et nombres de leurs arguments ).
Comment rendre l'instruction Eloquent ci-dessus exécutable ?
Merci beaucoup beaucoup de votre réponse.
Respectueusement.
Jean François Ortolo
Jean Fran=c3=a7ois Ortolo
Le #26443768
Le 05/09/2017 à 10:21, Jean François Ortolo a écrit :
Bonjour Monsieur
J'ai terminé peu ou prou mon ORM.
Je suis en train de faire le formulaire de test.
Celui-ci nécessite d'interpréter l'instruction Eloquent entrée dans
le champ de saisie, sous une forme PHP réellement exécutable.
Ci dessous, un exemple de code PHP produit :
/*
* Instanciation
* de l'ORM.
*/
$conn = new Database("");
/*
* Les fonctions
* et arguments sont
* dans des variables.
*/
$conn->$func1($arg1)->$func2($arg2)-$func3($arg3)->$func4($arg4);
les $func sont : 'TABLE', 'SELECT', 'WHERE', et 'GET',
et les $arg sont : "'CHEVAUX'", "'NUMCH', 'NOMCH'", "'NUMCH', 2000",
et "" ( vide ).
Quand je met la fonction eval() à chaque argument, la fonction eval()
rechigne ( à l'exécution ) devant la virgule de l'argument.
Je dispose de tous les arguments des fonctions ( $arg11, $arg21,
$arg22, $arg31, $arg32, et $arg41 ), mais je ne peux pas rédiger le PHP
directement avec ces arguments détaillés, car il y a trop de
possibilités ( nombre de fonctions et nombres de leurs arguments ).
Comment rendre l'instruction Eloquent ci-dessus exécutable ?
Merci beaucoup beaucoup de votre réponse.
Respectueusement.
Jean François Ortolo


Bonjour Monsieur
Le problème est résolu.
J'ai fait :
eval('echo $conn->'.$func1.'(' . $arg1 . ' )->'.$func2.'( ' . $arg2
. ' )->'.$func3.'( ' . $arg3 . ' )->'.$func4.'( ' . $arg4 . ' );');

Mon ORM a affiché :
SELECT NUMCH, NOMCH FROM `CHEVAUX` WHERE `NUMCH` 00
Mon ORM pour les tests, est configuré pour afficher le SQL
relationnel, sans l'exécuter.
Je vais tester sous peu avec des arrays et strings comme paramètres.
Respectueusement.
Jean François Ortolo
Publicité
Poster une réponse
Anonyme