Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

D=c3=a9pendances entre plusieurs classes.

4 réponses
Avatar
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

4 réponses

Avatar
Olivier Miakinen
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
Avatar
Jean Fran=c3=a7ois Ortolo
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
Avatar
Jean Fran=c3=a7ois Ortolo
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
Avatar
Jean Fran=c3=a7ois Ortolo
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