cs_wizad
Messages postés355Date d'inscriptionsamedi 30 octobre 2004StatutMembreDernière intervention14 avril 2009
-
6 août 2006 à 10:48
psykocrash
Messages postés240Date d'inscriptionvendredi 14 juin 2002StatutMembreDernière intervention17 mars 2009
-
3 mai 2007 à 15:21
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
psykocrash
Messages postés240Date d'inscriptionvendredi 14 juin 2002StatutMembreDernière intervention17 mars 2009 3 mai 2007 à 15:21
Ah j'ai oublié de le dire dans le commentaire : j'ai ajouté un petit fichier d'exemple d'utilisation.
psykocrash
Messages postés240Date d'inscriptionvendredi 14 juin 2002StatutMembreDernière intervention17 mars 2009 3 mars 2007 à 13:33
Quelqu'un aurait des idées d'amélioration ? Je voudrais en faire une classe vraiment complète et qui puisse être utilisée par un maximum d'applications.
psykocrash
Messages postés240Date d'inscriptionvendredi 14 juin 2002StatutMembreDernière intervention17 mars 2009 14 août 2006 à 18:11
Grande mise à jour : Possibilitié de faire un backup de la base de données !!! :D
psykocrash
Messages postés240Date d'inscriptionvendredi 14 juin 2002StatutMembreDernière intervention17 mars 2009 7 août 2006 à 23:29
Pour deux raisons. La première est qu'il faut faire la différence entre les requêtes qui renvoient des résultats et les autres. La deuxième est que CMySQL::query est programmée pour exécuter plusieurs requêtes à la suite. Elle prend donc plus de temps à l'exécution. Quelques millisecondes, c'est ridicule, mais à grande échelle, ça se fait sentir...
:)
Naixn
Messages postés455Date d'inscriptionmardi 17 septembre 2002StatutMembreDernière intervention22 juillet 2007 7 août 2006 à 11:34
Pourquoi ne pas appeler $this->query à chaque fois que tu fais une requête, plutôt que de faire à chaque fois :
- mysql_query();
- $nbrequetes++;
- if (!$result) _errorlog();
Je me trompe peut-être, mais j'imagine que ça serait plus simple non ?
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 6 août 2006 à 16:58
y'a pas de constructeur ? merde j'ai mal vu moi aussi
FhX => j'arrive ^^
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 6 août 2006 à 16:29
"Je suppose que ça ne s'adresse pas a moi car je n'utilise pas de constructeur, donc je zappe."
Ah oui d'accord j'ai mal lu :S
Comme je voyais PHP4, je croyais que ta premère méthode était le constructeur...
rahhh, jme suis levé trop tot :p
psykocrash
Messages postés240Date d'inscriptionvendredi 14 juin 2002StatutMembreDernière intervention17 mars 2009 6 août 2006 à 16:04
Ahhhhh okk !!!! Je viens de lire le source "PHP5 - COUCHE D'ABSTRACTION SGBD" de Fhx et j'ai compris ce concept d'abstraction. Je l'utilisais déjà dans d'autres contextes mais je savais pas que ça s'apellait comme ça.
Pour l'instant je n'en ai pas besoin puisque ma classe se limite à mysql, mais effectivement, si elle devait supporter plusieures bases, je m'en servirais.
D'autres suggestions ?
psykocrash
Messages postés240Date d'inscriptionvendredi 14 juin 2002StatutMembreDernière intervention17 mars 2009 6 août 2006 à 15:55
@Anthomicro : J'ai préféré ne pas passer par le constructeur pour la simple raison que le constructeur en PHP5 n'est pas déclaré de la même façon qu'en PHP4. Par soucis de compatibilité, je garderais donc cette partie de la classe telle qu'elle est.
@Fhx :
"La connection dans le constructeur est la dernière chose à faire. On peut avoir à instancier un objet SQL sans vouloir forcément s'y connecter.
Si je veux juste faire de l'initialisation en début de page je suis obligé d'ouvrir une connection avec le serveur SQL ! Grosse erreur, on doit ouvrir la connection SQL que si on le désir ou alors lors de ta première query !
Le constructeur est fait pour initialiser ta classe... pas autre chose. Je rappèle que le constructeur d'une classe ne renvoit RIEN !"
Je suppose que ça ne s'adresse pas a moi car je n'utilise pas de constructeur, donc je zappe.
function isConnected() : "si tu fais la connection dans ton constructeur" Mais de quoi tu parles ? je n'utilise PAS de constructeur... et cette méthode me permet d'éviter d'exécuter une requête alors qu'aucune connexion n'a été établie auparavent.
function Securiser(&$value) : Certains préfèrent récupérer la valeur, d'autre passer par les références. Pour que tout le monde soit content, je fais du deux en un.
-> Je vais chercher des infos sur l'abstraction sur le net, mais je vois toujours pas à quoi ça peux bien me servire. Ce ne serait pas pour avoir MaCLasse->db1, MaClasse->db2, etc. ?
cs_wizad
Messages postés355Date d'inscriptionsamedi 30 octobre 2004StatutMembreDernière intervention14 avril 2009 6 août 2006 à 15:53
L'abstraction est une surcouche qui permet d'uniformiser les classes filles.
L'interface, c'est le fait d'avoir des méthodes qui intéragissent avec le dev. D'ailleurs, dans une interface en PHP5, toutes les méthodes sont public ! C'est pas pour rien :)
désolé l'habitude de nommer l'abstraction, interface moi (ça doit me venir du C#) Enfin bon sur l'esprit c'était ça...
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 6 août 2006 à 15:34
L'abstraction est une surcouche qui permet d'uniformiser les classes filles.
L'interface, c'est le fait d'avoir des méthodes qui intéragissent avec le dev. D'ailleurs, dans une interface en PHP5, toutes les méthodes sont public ! C'est pas pour rien :)
Bon, jvais m'y mettre niveau commentaire :
La connection dans le constructeur est la dernière chose à faire. On peut avoir à instancier un objet SQL sans vouloir forcément s'y connecter.
Si je veux juste faire de l'initialisation en début de page je suis obligé d'ouvrir une connection avec le serveur SQL ! Grosse erreur, on doit ouvrir la connection SQL que si on le désir ou alors lors de ta première query !
Le constructeur est fait pour initialiser ta classe... pas autre chose. Je rappèle que le constructeur d'une classe ne renvoit RIEN !
function isConnected()
A quoi ca sert ca ? si tu fais la connection dans ton constructeur, ca ne sert à rien d'en faire une méthode pour faire un check sur chaque méthode type "select", "update" et autre !!!!
Méthode qui ne sert totalement à rien ici !
function Securiser(&$value)
Si tu a un return dans ta fonction, pas la peine de faire passer ta variable par référence :)
Et y'a peut être plein d'autres trucs que j'ai pas vu (jviens de me lever :p).
Mais y'a trop de commentaires :p
cs_wizad
Messages postés355Date d'inscriptionsamedi 30 octobre 2004StatutMembreDernière intervention14 avril 2009 6 août 2006 à 15:22
sur le principe (je détail la façon de coder ce soir)
une classe d'abstraction est une sorte de classe interface, lors de l'instanciation de cette classe tu passe un paramêtre le nom de la sous-classe à utiliser. Chaque sous-classe correspond à un système d'accés au données différents (mais ça peut être appliqué à d'autre système).
Regarde peut être du coté de certaine sources (cherche : classe MySQL) de ce site qui t'en diront plus (me semble qu'il y avait une trs bonne source de fhx à ce sujet, j'espère ne pas me tromper de propriétaire).
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 6 août 2006 à 15:21
T'as posté entre temps ^^
bah vu que t'es en PHP4 ça pourrait donner ça.
Genre tu fais un constructeur comme ça :
function CMySQL(hote 'blabla', user 'blabla', passe = 'blabla')
{
tes assignations ici
}
en gros dans chaque fichier tu pourras soit appeler ta classe comme ça :
$classe = new CMySQL();
ou encore comme ça si tu veux redéfinir les accès : $classe = new CMySQL('hote','user','passe');
:)
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 6 août 2006 à 15:17
Psykocrash > en fait faire une fonction pour chaque type de requête par exemple, c'est lourd ;)
Pareil pour renvoyer le nombre de lignes d'une requête, là tu fais la requête + le nombre de lignes, bof :-(
psykocrash
Messages postés240Date d'inscriptionvendredi 14 juin 2002StatutMembreDernière intervention17 mars 2009 6 août 2006 à 15:13
Salut,
@Wizad : J'ai mis ces fonctions par soucis de clareté de code. A chaque fois qu'on attaque un gros projet, on se trouve obligé de stocker des requêtes préfaites, et on se retrouve avec des mysql_query($request, $link); sans savoir de quel type de requête il s'agit, et là c'est pas gagné pour celui qui veux débugger le code. Dans ma classe, on sait au moins de quel type de requête il est question, c'est au moins ça de gagné.
Sinon tu peux m'expliquer un peut plus ce "passage par une classe d'abstraction" stp ? Je sais pas comment ça marche, et si ça peux améliorer ma classe, alors je suis preneur :)
@Anthomicro : Pour les logs, c'est fait (mais pas encore testé). Comment tu voudrais qu'on gère les paramètres ?
Merci pour vos idées les gars :)
cs_wizad
Messages postés355Date d'inscriptionsamedi 30 octobre 2004StatutMembreDernière intervention14 avril 2009 6 août 2006 à 14:14
désolé pour la demande de screen étant mal réveillé ce atin j'ai même pas tilté sur le mot classe.
Sinon je ne voix pas l'intérêt de certains éléments (insert(request))... pour moi de bonnes idées mais inachevé.
Petite suggestion : la passage par un classe d'abstraction aurait été un plus (permettant par exemple d'avoir plusieur base supporté)
psykocrash
Messages postés240Date d'inscriptionvendredi 14 juin 2002StatutMembreDernière intervention17 mars 2009 6 août 2006 à 13:59
Anthomicro, tu pourrais m'expliquer plus en détail en quoi ma classe est lourde ? et aussi qu'est ce que tu voudrais que je fasse d'une surcharge de constructeur ?
Pour ce qui est d'enregistrer les logs d'erreurs je vais l'ajouter, ça me semble intéressant :)
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 6 août 2006 à 12:21
Salut :)
Je trouve ta classe pas mal, ça innove un peu des autres plus basiques basées généralement sur de la redéfinition de méthodes (mon ancienne classe n'y fait pas exception). Seul problème à mon avis : sa lourdeur.
Dommage qu'il n'y ait pas de surcharge de constructeur en PHP4, car perso je n'aime pas avoir à foutre les paramètres sur chaque page, en effet si tu dois faire ça, faut soit indiquer les paramètres en clair sur chaque page (ce qui est barbant niveau portabilité dès que tu changes d'hébergeur) soit passer par un fichier de conf que tu vas inclure sur chaque page, code supplémentaire et perte de perfs au final donc :-(
Sinon la gestion des erreurs n'est pas encore assez complète (genre tu pourrais logguer ça en fonction d'un attribut qui prendrait la valeur true ou false suivant que tu souhaites débugger ou pas par exemple).
Je mets 7/10 pour le moment ;)
a +
cs_wizad
Messages postés355Date d'inscriptionsamedi 30 octobre 2004StatutMembreDernière intervention14 avril 2009 6 août 2006 à 10:48
Une grande question me taraude... avec leur nouvelle loi il semble que pour diffuser tout contenu (gratuit ou payant) il faut préalablement le déposer (brevet)... on fait quoi maintenant?
Sinon un petit screen peut être sympa. Je zieute le code et le fonctionnement ce soir.
3 mai 2007 à 15:21
3 mars 2007 à 13:33
14 août 2006 à 18:11
7 août 2006 à 23:29
:)
7 août 2006 à 11:34
- mysql_query();
- $nbrequetes++;
- if (!$result) _errorlog();
Je me trompe peut-être, mais j'imagine que ça serait plus simple non ?
6 août 2006 à 16:58
FhX => j'arrive ^^
6 août 2006 à 16:29
Ah oui d'accord j'ai mal lu :S
Comme je voyais PHP4, je croyais que ta premère méthode était le constructeur...
rahhh, jme suis levé trop tot :p
6 août 2006 à 16:04
Pour l'instant je n'en ai pas besoin puisque ma classe se limite à mysql, mais effectivement, si elle devait supporter plusieures bases, je m'en servirais.
D'autres suggestions ?
6 août 2006 à 15:55
@Fhx :
"La connection dans le constructeur est la dernière chose à faire. On peut avoir à instancier un objet SQL sans vouloir forcément s'y connecter.
Si je veux juste faire de l'initialisation en début de page je suis obligé d'ouvrir une connection avec le serveur SQL ! Grosse erreur, on doit ouvrir la connection SQL que si on le désir ou alors lors de ta première query !
Le constructeur est fait pour initialiser ta classe... pas autre chose. Je rappèle que le constructeur d'une classe ne renvoit RIEN !"
Je suppose que ça ne s'adresse pas a moi car je n'utilise pas de constructeur, donc je zappe.
function isConnected() : "si tu fais la connection dans ton constructeur" Mais de quoi tu parles ? je n'utilise PAS de constructeur... et cette méthode me permet d'éviter d'exécuter une requête alors qu'aucune connexion n'a été établie auparavent.
function Securiser(&$value) : Certains préfèrent récupérer la valeur, d'autre passer par les références. Pour que tout le monde soit content, je fais du deux en un.
-> Je vais chercher des infos sur l'abstraction sur le net, mais je vois toujours pas à quoi ça peux bien me servire. Ce ne serait pas pour avoir MaCLasse->db1, MaClasse->db2, etc. ?
6 août 2006 à 15:53
L'interface, c'est le fait d'avoir des méthodes qui intéragissent avec le dev. D'ailleurs, dans une interface en PHP5, toutes les méthodes sont public ! C'est pas pour rien :)
désolé l'habitude de nommer l'abstraction, interface moi (ça doit me venir du C#) Enfin bon sur l'esprit c'était ça...
6 août 2006 à 15:34
L'interface, c'est le fait d'avoir des méthodes qui intéragissent avec le dev. D'ailleurs, dans une interface en PHP5, toutes les méthodes sont public ! C'est pas pour rien :)
Bon, jvais m'y mettre niveau commentaire :
La connection dans le constructeur est la dernière chose à faire. On peut avoir à instancier un objet SQL sans vouloir forcément s'y connecter.
Si je veux juste faire de l'initialisation en début de page je suis obligé d'ouvrir une connection avec le serveur SQL ! Grosse erreur, on doit ouvrir la connection SQL que si on le désir ou alors lors de ta première query !
Le constructeur est fait pour initialiser ta classe... pas autre chose. Je rappèle que le constructeur d'une classe ne renvoit RIEN !
function isConnected()
A quoi ca sert ca ? si tu fais la connection dans ton constructeur, ca ne sert à rien d'en faire une méthode pour faire un check sur chaque méthode type "select", "update" et autre !!!!
Méthode qui ne sert totalement à rien ici !
function Securiser(&$value)
Si tu a un return dans ta fonction, pas la peine de faire passer ta variable par référence :)
Et y'a peut être plein d'autres trucs que j'ai pas vu (jviens de me lever :p).
Mais y'a trop de commentaires :p
6 août 2006 à 15:22
une classe d'abstraction est une sorte de classe interface, lors de l'instanciation de cette classe tu passe un paramêtre le nom de la sous-classe à utiliser. Chaque sous-classe correspond à un système d'accés au données différents (mais ça peut être appliqué à d'autre système).
Regarde peut être du coté de certaine sources (cherche : classe MySQL) de ce site qui t'en diront plus (me semble qu'il y avait une trs bonne source de fhx à ce sujet, j'espère ne pas me tromper de propriétaire).
6 août 2006 à 15:21
bah vu que t'es en PHP4 ça pourrait donner ça.
Genre tu fais un constructeur comme ça :
function CMySQL(hote 'blabla', user 'blabla', passe = 'blabla')
{
tes assignations ici
}
en gros dans chaque fichier tu pourras soit appeler ta classe comme ça :
$classe = new CMySQL();
ou encore comme ça si tu veux redéfinir les accès : $classe = new CMySQL('hote','user','passe');
:)
6 août 2006 à 15:17
Pareil pour renvoyer le nombre de lignes d'une requête, là tu fais la requête + le nombre de lignes, bof :-(
6 août 2006 à 15:13
@Wizad : J'ai mis ces fonctions par soucis de clareté de code. A chaque fois qu'on attaque un gros projet, on se trouve obligé de stocker des requêtes préfaites, et on se retrouve avec des mysql_query($request, $link); sans savoir de quel type de requête il s'agit, et là c'est pas gagné pour celui qui veux débugger le code. Dans ma classe, on sait au moins de quel type de requête il est question, c'est au moins ça de gagné.
Sinon tu peux m'expliquer un peut plus ce "passage par une classe d'abstraction" stp ? Je sais pas comment ça marche, et si ça peux améliorer ma classe, alors je suis preneur :)
@Anthomicro : Pour les logs, c'est fait (mais pas encore testé). Comment tu voudrais qu'on gère les paramètres ?
Merci pour vos idées les gars :)
6 août 2006 à 14:14
Sinon je ne voix pas l'intérêt de certains éléments (insert(request))... pour moi de bonnes idées mais inachevé.
Petite suggestion : la passage par un classe d'abstraction aurait été un plus (permettant par exemple d'avoir plusieur base supporté)
6 août 2006 à 13:59
Pour ce qui est d'enregistrer les logs d'erreurs je vais l'ajouter, ça me semble intéressant :)
6 août 2006 à 12:21
Je trouve ta classe pas mal, ça innove un peu des autres plus basiques basées généralement sur de la redéfinition de méthodes (mon ancienne classe n'y fait pas exception). Seul problème à mon avis : sa lourdeur.
Dommage qu'il n'y ait pas de surcharge de constructeur en PHP4, car perso je n'aime pas avoir à foutre les paramètres sur chaque page, en effet si tu dois faire ça, faut soit indiquer les paramètres en clair sur chaque page (ce qui est barbant niveau portabilité dès que tu changes d'hébergeur) soit passer par un fichier de conf que tu vas inclure sur chaque page, code supplémentaire et perte de perfs au final donc :-(
Sinon la gestion des erreurs n'est pas encore assez complète (genre tu pourrais logguer ça en fonction d'un attribut qui prendrait la valeur true ou false suivant que tu souhaites débugger ou pas par exemple).
Je mets 7/10 pour le moment ;)
a +
6 août 2006 à 10:48
Sinon un petit screen peut être sympa. Je zieute le code et le fonctionnement ce soir.