|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre Expert
![]() David Vincent (l'homme qui a vu les extra-terrestres)Développeur Web Inscription : mars 2004 Messages : 3 239 ![]() |
Bonjour à toutes et à tous,
Je programme depuis pas mal de temps en PHP (+- 24 mois) en procédural. J'ai décidé aujourd'hui de consacrer un nouveau projet à l'apprentissage de la POO. Tout le monde me dit que la POO c'est plus pro, que le code est plus facile à maintenir et à corriger. J'ai plusieurs questions de débutant et je profite d'une tâche bien précise pour vous poser mes questions : Ma première classe va me permettre de créer un utilisateur. Un utilisateur est composé de : - un nom - un prénom - une adresse email - un numéro de GSM J'ai donc codé ce bout de code : Code :
- Je voudrais contrôler que le nom contient au moins deux caractères, le prénom au moins 3 caractères... j'utilise des simples if ? Genre : Code :
3) est-il encore nécessaire d'utiliser mysql_real_escape_string quand on utilise la POO ? 4) j'aimerais enregistrer les nouveaux utilisateurs dans une bd. J'aimerais utiliser AJAX pour faire cela, auriez-vous une idée de comment je pourrais m'y prendre ? J'aurai d'autres questions (assez rapidement) après vos réponses. Je vous remercie mille fois pour votre aide et je vous souhaite une bonne fin de W.E. beegees
__________________
|
||||
|
|
00
|
|
|
#2 | ||
|
Membre habitué
![]() Inscription : décembre 2007 Messages : 181 ![]() |
Bonjour,
pour répondre globalement dans un premier temps, la POO c'est bien, c'est propre c'est pro et facilite la maintenance, maintenant il faut voir si sa mise en place, (plus lourde) est justifiée. Un batch qui ne tourne qu'une fois ne sera pas écris en POO par exemple. Ensuite pour ton code, au niveau de l'instanciation: Code :
Pour ta fonction il serait plus sage d'utiliser un >= et non == ? 2/ je ne me suis pas + penché que ça sur les namespace, mais sans doute faut -il que tu précise l'appartenance de chacun si tu veux que ton code marche. 3/ Les fonctions de controles sont toujours utiles. Si un code béliqueux ne fais pas planter ta requete mysql, le risque de planter une autre partie du code php, n'est pas écarté. 4/ ajax ne change en rien concernant la POO. Ajax fais l'interface entre une page html et une page asynchrone PHP. Les données et instruction de page php seront simplement écritent en objet. Après à un moment donné ton code contiendra forcément un Code :
sql="INSERT INTO 'utilisateurs' //etc ...
|
||
|
|
10
|
|
|
#3 | ||||||
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
1ère erreur: ta classe utilisateur est une classe modèle, c'est à dire qu'elle caractérise une information au niveau de ton système de persistance (généralement la BDD). On considère généralement que ce n'est pas le rôle des classes modèles de faire les vérifications, c'est le role des contrôleurs (merci de jeter un oeil au pattern MVC, généralement recommandé).
Pour faire tes contrôles tu as le choix entre les if classiques et les filtres. Tu peux aussi créér tes propres classes de validation. Code :
Citation:
Par ailleurs, pour te simplifier la vie je te recommande un singleton de PDO pour la connection avec la DBB. Voici un implem d'un Singleton PDO: Code :
Citation:
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
||||||
|
00
|
|
|
#4 | |||
|
Membre du Club
![]() Inscription : février 2005 Messages : 63 ![]() |
Citation:
bien que ce terme soit tout a fait exact, ca peut etre bien de simplifier sa definition (enfin je vais essayer a ma maniere) : c'est un systeme, un moteur qui permet d'enregistrer l'etat de ton objet en base. Concrement ca signifie que la classe de ton Utilisateur doit hériter d'un systeme ORM (ex: PEAR: qui est capable de "convertir" l'etat de ton objet Utilisateur en une requete SQL classique de type "INSERT INTO". Ainsi tu manipule un objet, modifie ses propriétés et tu utilise de simples methodes insert/update, ... Code :
qui proposent la méthode persist(), qui a la charge de deviner elle meme s'il faut faire un "insert", un "update" ... L'avantage de ce moyen c'est que tu manipule ton objet, tu pense beaucoup moins SQL. |
|||
|
|
00
|
|
|
#5 |
|
Membre habitué
![]() Inscription : décembre 2007 Messages : 181 ![]() |
Je trouve ça super toutes les infos que vous lui donner, mais vous avez pas l'impression d'expliquer la théorie des cordes à quelqu'un qui vous pose sur une question sur les atomes en général ?
|
|
|
00
|
|
|
#6 | |||||
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Citation:
Voici la mienne: Code :
Code :
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|||||
|
00
|
|
|
#7 | |||||
|
Membre du Club
![]() Inscription : février 2005 Messages : 63 ![]() |
Citation:
1. c'est censé etre quoi la variable $nom (celui de droite). 2. dans ton constructeur, il y a bien 4 arguments en entrée, mais il n'y a aucun affectations sur les propriétés de l'objet. C'est justement la qu'il faut le faire, sinon tes propriétés n'auront jamais de valeur. D'autant plus que ya pas de paires de getter/setter, donc aucun moyen de les affecter plus tard. 3. méthode "creer_utilisateur()" : a quoi sert cette méthode ? Elle fait double emploi avec le constructeur. De plus les variable locale $nom, $prenom, $email, $gsm n'ont aucune valeur, car elles n'existent pas dans la signature de la méthode. Il faudrait au moins Code :
|
|||||
|
|
00
|
|
|
#8 | |
|
Membre du Club
![]() Inscription : février 2005 Messages : 63 ![]() |
Citation:
En effet Doctrine et autres sont des machines de guerre. Je dis pas du tout qu'il faut qu'il utilise ca (doux jesus !), car c'est surdimentionné Je les cite juste a titre d'exemple. Le but de mon propos c'etait surtout d'expliquer en résumé ce a quoi ca sert. |
|
|
|
00
|
|
|
#9 | ||
|
Expert Confirmé
![]() ![]() |
Citation:
Citation:
Pour cela il valide juste la partie de la requête du client nécessaire à la détermination du modèle mais ne sait pas valider autre chose et encore moins une partie du travail incombant au modèle. Donc je pense que de ne pas valider les données du modèle dans le contrôleur n'est pas une erreur dans une architecture MVC.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile... |
||
|
00
|
|
|
#10 | |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Citation:
J'ai pris soin de faire remarquer qu'il s'agit d'une règle générale. La plupart des architectures MVC fonctionnent ainsi pour une raison simple: à quoi bon invoquer le métier / modèle si les données ne sont pas valides ? A mon sens, vu qu'il est de la responsabilité du contrôleur de prendre en charge la requête, il n'est pas faux de lui faire faire les vérifications d'usage. http://tahe.developpez.com/web/php/mvc/
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
|
00
|
|
|
#11 | |||||
|
Membre Expert
![]() David Vincent (l'homme qui a vu les extra-terrestres)Développeur Web Inscription : mars 2004 Messages : 3 239 ![]() |
Bonsoir,
Merci à vous tous pour vos nombreuses réponse. @roduce : Citation:
Citation:
Citation:
Citation:
@Benjamin : Citation:
![]() Je connais (théoriquement) le modèle MVC, je vais laisser ce modèle pour (un peu) plus tard, je commence par la POO. Idem pour singleton, quand je maîtriserai les bases de la POO, je passerai aux concepts avancés. Je prends donc bien note de vos commentaires, mais je vais essayer de comprendre l'utilité des interfaces et des classes abstraites avant d'aller plus loin. Encore un tout grand merci à vous tous. beegees
__________________
|
|||||
|
|
00
|
|
|
#12 | ||||||||
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Citation:
Une interface est très utile par exemple dans le cadre des connections car toutes tes classes de connection vont avoir besoin au moins de "open", "close", "read" et "write" et ce peu importe le média avec lequel elle parlent. Il est en revanche de la responsabilité des classes qui implémentent cette interface (I_Connect pourrait être son nom) de définir ces méthodes en respectant le prototype défini par I_Connect. Citation:
Voici un exemple: Code :
Citation:
De plus il existe des bridges PHP / JavaScript comme XOAD pour faire ce mapping. Pour ce qui est de ton apprentissage, je te suggère de suivre ce cursus:
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
||||||||
|
00
|
|
|
#13 | |
|
Membre Expert
![]() Inscription : janvier 2007 Messages : 1 452 ![]() |
Hello,
Citation:
Je ne peux que te conseiller de prendre quelques heures pour te plonger dans un framework existant. Tu pourras faire tout cela, rapidement apprécier les plus et les moins. Sans vouloir faire de la pub, mais pour l'avoir testé je trouve qu'il est bien pour tout cela, symfony2 t'offrira une certaine vision des chose qu'il n'est pas nécessaire de prendre pour argent comptant, mais c'est intéressant à bien des points de vue d'une conception orientée objet et t'épargnera les détails d'implémentation qu'il faut écrire pour valider une conception soigneusement pensée. mes 2 cents, a+ |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com