L'astuce est que j'ai corrigé mon code depuis en suivant ces critiques. Certes, je ne les ai pas encore toutes suivies et donc corrigé tout mon code. Mais c'est surtout qu'à l'origine, les informations de connexion étaient stockées directement dans ma classe et que ni le constructeur, ni d'autres fonctions ne permettaient de les modifier. Ce qui est parfaitement idiot.
MALALAM, avant de poster des critiques qui descendent le travail fait par les internautes qui font vivre le site que tu administres, tu devrais plutôt réviser la POO.
Je ne suis pas un expert mais je sais au moins faire la différence entre une classe et une instance de classe (un objet pour info :p) cf ton premier post :2 classes...
Bon code dans l'ensemble, bonne idée de base consistant a faire une API franco. C nice :)
tu as 2 façons de procéder.
1 - Tu lances des exceptions qui doivent arrêter l'exécution de ta classe, dans ce cas tu ne fais que les lancer dans ta classe et tu les interceptes en dehors.
2 - tu veux pouvoir gérer tes exceptions dans ta classe (par exemple, j'essaye une requête...mais si je ne suis pas connecté, je veux pouvoir intercepter l'excption et me connecter pour pouvoir conbtinuer), dans ce cas, tu gères tes try catch dans ta classe. Ce n'est pas le cas le plus fréquent, mais ça peut arriver.
1 exemple illustrant les 2 exemples :
<?php
class a {
public function myFunc() {
if(false === isset($b)) {
throw new Exception('Erreur $b n\'est pas initialisé');
}
echo $b;
}
}
Salut,
Pour les exceptions:
# try
# {
# mysql_query($sql);
# $this->result=mysql_affected_rows();
# $retour[0]=$this->result;
# $retour[1]=true;
# }
# catch(Exception $Except)
# {
# }
Là Tu cherches à attraper des exceptions qui seraient émises par les fonctions mysql natives:
cela te sert absolument à rien car les fonctions de la librairie mysql ne lance pas d'exception cachable.
Tu dois à ce niveau les lancer en fonction de l'erreur rencontrée dans ton code. Cette exception pourra être récupérée au moment de l'appel à tes méthodes de ta classe dans les try.
La note de 1 est injustifié je vais donc mettre le maximum pour contre-balancer. Je trouve que le code est un bon départ. Certes il y a mieux mais c'est toujours bien :) Bon noël :)
Ravi que tu le prennes bien :-)
Bonnes fêtes à toi aussi, et vraimznt, revois ta copie et sors nous un joli code contre lequel je ne pourrai rien dire ;-) Je suis sûr que tu le peux.
Un "hint" : sprs des sentiers battus un peu plus. Des wrappers, il y en a des tas...et ce n'est pas super utile. Des abstractions DB, il y en a bcp aussi, et tu aurais vraiment bcp de boulot si tu voulais te démarquer. trouve autre chose...du genre...tu veux faaire un framework mysql francophone ? Ok, attaque toi à SQL. SQL est un langage simple, mais anglophone...un truc très sympa serait de proposer une alternative francophone. Du genre :
SELECTIONNE user_nom, user_email DANS users OU user_id = 251207
Par exemple hein... :-) En moins reessemblant à du SQL ce serait encore mieux. Avec des méthodes par exemple. Enfin chais pas...change d'optique.
je dois être dans un mauvais jour aujourd'hui...mais je vais encore ne pas être très gentil...(c'est le deuxième code que je descends).
Tu utilises php5, déjà, bien. Je vois encore trop de codes en PHP4, à l'aube de la sortie de PHP6...
Par contre, j'ai un paquet de griefs!
Déjà, pourquoi mets-tu tes paramètres de connexion dans ta classe? Il faut modifier ta classe à chaque fois qu'on veut une connexion à un autre serveur? genre, si mon application web doit se connecter à 2 serveurs db (et c'est svt le cas pour moi...dans mon taf), je dois avoir 2 classes?? Les passer en paramètre serait pourtant si simple...
Tu ne gères aucune erreur. php5 offre les exceptions, et toi, tu n'en fais rien. Si mon serveur est down, il se passe quoi ? Certes, ton constructeur retourne false (???), ce qui est déjà étrange, mais de toute manière il essaye de se connecter; donc si mon serveur db est down, j'aurai une belle erreur. Alors que si tu avais implémenté les exceptions, j'aurais pu "catcher" (intercepter ou attraper, pour les anglophobes) cette erreur.
Tu me donnes des méthodes ReqDELETE, ReqINSERT etc...avec des mysql_affected_rows() en retour, sans te soucier de vérifuer que j'utilise la bonne méthode. Que se passe-t-il si je fais un ReqSELECT en lui passant une requête UPDATE ? Ou l'inverse ?
Des die() dans une classe...bref, ça rejoint mon grief sur la gestion des erreurs.
la méthode TupleSuivant() m'inquiète un peu. Il y a une fonction qui s'appelle mysql_data_seek() qui aurait été nettement plus appropriée.
Il n'y a même pas la gestion des ressources (resources, je ne sais pas trop comment traduire ça...ressource n'est pas franchement à propos, mais là je ne trouve rien de mieux). Ta classe est juste un "wrapping" des fonctions mysql_*, avec tout juste quelques "améliorations" (Req*() ).
Bref, selon moi, ta classe n'apporte rien, voire même enlève à la facilité d'utilisation des fonctions mysql_*().
Tu devrais sérieusement jeter un oeil sur d'autres classes DB, sur l'abstraction, les singletons, les multitons, sur PDO etc...avant de continuer sur cette voie pour ton projet de "framework francophone mysql". Tu pars sur un mauvais trip, là.
Joyeux Noël... ;-) (désolé, je sais que je suis dur là, donc je voulais contrebalancer : ton idée est louable, tu utilises php5, etc...mais tu te fourvoies là. Je ne peux pas te laisser faire sans râler. Mais quand même, je veux que tu passes de bonnes fêtes de fin d'années...donc : réflêchis, relis un peu la doc de PHP, mate d'autres codes dans le même genre, et change ton optique...et pour la nouvelle année, repars sur de nouvelles bases!).
Donc là je prends la défense de malalam.
Merci de l'encouragement quand même^^
Je ne suis pas un expert mais je sais au moins faire la différence entre une classe et une instance de classe (un objet pour info :p) cf ton premier post :2 classes...
Bon code dans l'ensemble, bonne idée de base consistant a faire une API franco. C nice :)
tu as 2 façons de procéder.
1 - Tu lances des exceptions qui doivent arrêter l'exécution de ta classe, dans ce cas tu ne fais que les lancer dans ta classe et tu les interceptes en dehors.
2 - tu veux pouvoir gérer tes exceptions dans ta classe (par exemple, j'essaye une requête...mais si je ne suis pas connecté, je veux pouvoir intercepter l'excption et me connecter pour pouvoir conbtinuer), dans ce cas, tu gères tes try catch dans ta classe. Ce n'est pas le cas le plus fréquent, mais ça peut arriver.
1 exemple illustrant les 2 exemples :
<?php
class a {
public function myFunc() {
if(false === isset($b)) {
throw new Exception('Erreur $b n\'est pas initialisé');
}
echo $b;
}
}
try {
$a = new a;
$a->myFunc();
} catch(Exception $e) {
echo $e;
}
class c {
public function myFunc() {
try {
if(false === isset($b)) {
throw new Exception('Erreur $b n\'est pas initialisé');
}
} catch(Exception $e) {
$b = 1;
}
echo $b;
}
}
$c = new c;
$c->myFunc();
?>