Discussion:
Dépendances entre plusieurs classes.
(trop ancien pour répondre)
Jean François Ortolo
2017-08-11 09:47:43 UTC
Permalink
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
Olivier Miakinen
2017-08-23 20:49:01 UTC
Permalink
Bonjour,
Post by Jean François Ortolo
[...]
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çois Ortolo
2017-08-24 07:39:43 UTC
Permalink
Post by Olivier Miakinen
Bonjour,
Post by Jean François Ortolo
[...]
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çois Ortolo
2017-09-05 08:21:09 UTC
Permalink
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çois Ortolo
2017-09-05 09:23:52 UTC
Permalink
Post by Jean François 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.
/*
* 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`=2000

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

Loading...