utiliser beaucoup d'objets en php ? [PHP] - PHP - Programmation
Marsh Posté le 19-04-2003 à 17:56:40
Me vision des chôses.
Déjà j'oublis le côté rapidité, je pars sur l'idée que le temps de création d'un objet n'est pas significatif (bref, qu'il corespond à un faible pourcentage du temps total d'exécution du programme).
J'utilise des classes que dans deux cas :
1) quand on doit faire un même traitement sur plusieurs ensemble de données diférentes. Par exemple, la gestion des modèles d'un site. (si tu regardes le site www.ubix.org tu véras que chaque news a un affichage standard, et la colone de gauche a un même affichage pour chaque section, l'utilisation d'un object permettrait de retarder certain traitements sans tout compliquer avec une quirielle de tableau sous peine de risquer la perte de données à afficher)
2) quand c'est une partie du site autonome (par exemple un système de génération d'un fichier sous un format bien définit) qui pourait être réutiliser dans d'autres sites. Ca permet ainsi de réduire à zéro les colisions au niveau des variables globales :
on utilise alors des variables globales qu'en entrée et a condition qu'elles ne proviennent pas du programme mais du serveur ou du navigateur, les autres variables qu'on doit garder en mémoire entre deux fonctions exécuté à des moments différents (et pas l'une appellé par l'autre) seront des propriété de l'object.
Les valeurs à retourner au programme principal le seront par des fonctions. (le programme de départ n'a pas à savoir comment sont stockés les valeurs dans la classe ce qui évite les problème en cas de changement de la structure interne de la classe)
Les valeurs a récupérer du programme appellant le sont a l'aide de fonctions de la classe. (le programme n'a pas a devoir mettre les valeurs dans des variables globale déterminé ce qui pourait entré en colision avec les variables globales déjà utilisé)
Heu, en me relisant, je suis pas sur de mettre expliqué clairement. Si t'as des questions, je suis tout ouis et j'essaierais de faire plus clair.
Marsh Posté le 19-04-2003 à 21:26:28
(desolé si je repond pas tt de suite apres ton post, mais j'avais effacé mon cookie il y kek temps alors j'ai pas vu tt de suite qu'on m'a repondu)
alors deja merci de ta reponse
bon apres le 1) j'ai pas trop compris, je voi pas de quoi tu parle pour www.ubix.org...
pour le 2eme point tout ce que j'ai compris (et c'est pas faute d'avoir essayé ) c'est que la prog objet est utilisé quand un script peu etre utilisé par differentes pages/sites. Mais la je vois pas encore l'interet par rapport au simples fonctions...
j'espere que tu va pas te decourager et me repondre encore une fois et puis si jamais t'a des petits exemples de trucs que tu a fait avec cet methode...
Marsh Posté le 19-04-2003 à 22:30:26
Big-Foot a écrit : (desolé si je repond pas tt de suite apres ton post, mais j'avais effacé mon cookie il y kek temps alors j'ai pas vu tt de suite qu'on m'a repondu) |
Je disais donc : (coupure de courant du à prise des pieds dans la ralonge. lol)
Pour le 2), Imagine un système de détection d'erreur rudimentaire utilisant une base de donnée.
T'as une première fonction qui note au tout début du script toutes les demandes de pages et une seconde qui note tout à la fin que la page ai bien été exécuté jusqu'au bout.
Pour que la seconde sache quel enregistrement elle doit mettre à jour, il faut que la première lui indique. Il y a alors trois possibilité :
La première, c'est que la première fonction le retroune au programme qui méttra la valeur dans une variable et ensuite ce programme devra la passer au second programme (une chance sur deux que le gas qui l'utilisera dans son site oublie de le faire sur certaines pages)
La seconde, c'est que la première fonction stocke la valeur dans une variable globale et que la seconde utilise la valeur contenu dans cette variable pour savoir où noter la fin d'exécution. Mais si dans le site une autre variable globale est utiliser alros cette valeur sera perdus ce qui fait que quasiment a chaque fois, la page sera noté comme ayant subis un arrêt avant la fin normale de l'exécution. De plus si dans le site cette variable globale là était utilisé pour indiquer si un fichier avait était déjà inclus, ca risque de provoquer des erreurs dans l'exécution. (fonction manquante car fichier non inclus ou fonction redéclaré)
La troisième méthode est l'utilisation d'une classe.
Au début du programme, on déclare un object (une variable) de cette classe là. Dans la classe, on peut exécuter une fonction initialisant l'object, dans cette fonction on apelle la fonction qui note que la page a été demandé. La valeur qui sera utilisé par la seconde fonction sera noté dans une variable de l'object (dans certains livres, ils apellent ces vairables "propriétés de la classe" ). A la fin du programme on appelle la seconde fonction de l'object qui va récupérer cette valeur et faire son traitement comme il faut.
L'avantage, c'est qu'il n'y a aucun risque de mélange entre la varialbe interne de la classe et celles du reste du site et il y a aucun risque que le gas qui créé le site oublis de passer à l'object la valeur comme il faut.
Bon, là, c'est un exemple avec une seule valeur a passer mais si t'en as plusieurs le système de l'object prends plus de valeur comparer aux autres.
Comme dans le cas 2) ce sont des sites que tu conais pas qui vont l'utiliser, tu ne peux pas savoir à l'avance si oui ou non, il n'y a pas de variable globale de tel non qui y sont utilisé. Donc la seconde méthode est de toute manière a proscrire. La première méthode est valide mais peut être source d'erreur et si t'as plusieurs valeurs qui doivent être retourné par une des fonctions, tu serais obligé de faire des tableaux.
Pour le cas 1), mon site, est à l'adresse http://bechat.free.fr/bechatv2 . Comme tu peux le voir, j'ai le même affichage des données sur tout l'écran. Avec un système d'object, je pourais dire que chaque groupe de donnée est stocké dans un object et que chaque object a des propriété différents modifiant l'affichage. Ca sera utile si dans une partie du code, j'ai des données qui devront être affiché dans des endroits différents de l'écran avec un affichage différent en fonction de l'endroit ou ca sera affiché.
Par exemple, je pourais vouloir faire un système de double menu l'un qui regroupe les diférentes parties du site en fonction d'un critère et l'autre qui récapitule un de ces regroupement en donnant plus de détail. Actuellement, je serais obligé de les remplir l'un après l'autre.
Avec le nouveau système, je pourais remplir les deux à la fois avec un affichage différent pour chaque menu et ce sans avoir besoin de faire gaffe à recharger les bonnes données d'affichage pour chaque donné que je rajoutes quelques part.
Bon, je suis sur que la description du cas 1) est toujours un peu trop incompréhensible. Dites, il y aurait pas quelqu'un pour lui donner un exemple mieux foutus, par ce que j'ai l'impression de pas savoir comment lui expliquer.
Au fait, j'oubliais un cas 3) Quand t'as une partie d'un site qui sera réutiliser par un autre site mais en rajoutant des fonctionnalités ou qui en modifie une partie du comportement, il est plus facile de le faire quand c'est de l'object que de simples fonctions. Dans le cas de simples fonctions, il faudra (a celui qui fait le système dérivé) analyser le programme fait par le premier, modifier certaines fonctions, en remplacer d'autres ...
Dans le cas d'un object, il créera une classe dérivé de la classe d'origine. Il déclarera une fonction dans sa classe de même nom que celle qu'il veut remplacer de la classe originale il fera des fonctions qui viendront rajouter des bouts de programmes autour de l'exécution normale de telle fonction de la classe normale.
Mais pour faire ça, il sera pas obligre de savoir exactement ce que fait chaque bout de chaque fonction de la classe d'origine, il aura jsute à savoir ce que font les fonctions mais de manière globale pour savoir comment dériver la classe globalement.
De plus, dans le cas de fonctions, en cas de mise à jour du système, celui qui réutilises le ssytème, sera peut être obligé de tout reprendre à zéro pour faire corespondre ces anciennes modifs avec celle de la mise à jour. Dans le cas d'un objet, il aura juste à mettre à jour les fichiers et a modifier ce qui corespond aux parties obsolettes ou aux anciennes fonctions dont le comportement a changé. Mais en tout cas, il perdra moins de temps a faire les modifications.
Marsh Posté le 19-04-2003 à 22:42:31
Moi je ne fais que du procédural, je sais même pas comment on fait un objet en PHP
(je suis un mauvais exemple, je sais )
pourtant quand je programme en Delphi & C++ j'essaie de faire un truc le plus orienté objet possible
Marsh Posté le 19-04-2003 à 22:48:04
edit:j'ai la flemme de lire tout ca ce soir
Marsh Posté le 19-04-2003 à 23:53:37
ok merci je vais m'imprimer tous ca et le lire tranquillement
Marsh Posté le 23-04-2003 à 16:25:59
je suis de retour
je suis desolé mais je comprend tjour pas tres bien le 2), t'aurrais pas un ptit script qui reprene ce concept ?
A par ca je suis en train de faire un script de vote, et je pense utiliser les objets : par exemple pour l'affichage des resultats ca se connect a la bdd, mais cet connection ne sera pas utile dans tt les pages car il sera dja connecté. Alors pour la connction et deconnection je pensée faire des class comme ca je peu utiliser ce script sur toutes les pages et meme d'autres sites. C'est une bonne utilisation de cet methode ?
Marsh Posté le 23-04-2003 à 17:04:40
http://www.fpdf.org/
tu regardes les scripts et les exemples.
Les scripts sont des classes dérivé de même que l'exemple avec un entête et un pied de page.
Je sais pas si ca sera sufisant pour mieux comprendre ce que je disais, mais je crois bien que c'est le meilleur exemple que je conaisse pour le moment.
Marsh Posté le 23-04-2003 à 17:09:03
ok merci je vais voir ca
et pour mon script de vote : c'est une bonne idée ou pas ?
Marsh Posté le 23-04-2003 à 17:28:13
je n'ai pas pris le temps de lire l'ensemble non plus, mais maintenant j'ai mon drapal....
une chose à dire quand même .....
les grandes nouveautés de PHP5 sont quand même très orientées objet. Je crois qu'il est important de faire ces premières armes avant d'être complétement largué.
Marsh Posté le 23-04-2003 à 17:38:04
A mon avi, il n'est utile de faire des object que si
Pour ta conection à la base de donnée, faire un object pour la conection et un pour la déconection est une mauvaise idée.
Mais en faire un qui va gérer tout les échanges avec la base de donnée est une bonne idée. Par tout les enemble, je veux dire : la conection, la déconection, l'envois des requêtes, la récupération de l'ensemble de résultat, l'index d'insertion pour quand tu fais un rajout dans la base sur une table en autoincrément ...
Là, c'est utile car ca centralise tout au même endroit et il suffira ensuite de changer d'objet pour changer de base de donnée sans avoir besoin de tout modifier partout. (second cas sur les trois) Ca n'empêchera pas qu'il faudra peut être retravaillé certaines requêtes a cause des spécificité de la nouvelle base de donnée.
Marsh Posté le 24-04-2003 à 09:12:34
Moi je programme en Objet tout simplement par le fait de pouvoir serialiser ceux-ci et les reconstituer sans trop se prendre la tete.
Egelement c plus simpas d'avoir une representatino UML a cote
Marsh Posté le 24-04-2003 à 18:45:29
samuelp a écrit : [...] |
c'est koi une representation UML ?
UML : j'ai deja entendu ca plustieurs fois sans jamais comprendre de quoi il est question...
Marsh Posté le 24-04-2003 à 19:00:14
Big-Foot a écrit : |
c'est un langage de modelisation, successeur de merise -> fais une recherche sur google
tu trouveras plein de docs
à e sujet ... sur une newsletter de nexen il parlait d'un soft permettant de générer des classes en php ... mais je ne me souviens plus lequel. KK'un en sait plus ?
Marsh Posté le 24-04-2003 à 20:47:59
ok j'ai cherché j'ai trouvé ca : http://uml.developpez.com/lp/
j'en suis qu'a la moitié...
Marsh Posté le 24-04-2003 à 21:36:00
Big-Foot a écrit : ok j'ai cherché j'ai trouvé ca : http://uml.developpez.com/lp/ |
si tu veux tu peux faire une synthèse pour la communauté
Marsh Posté le 24-04-2003 à 23:26:05
bon alors j'ai tout lu , c'est tres interessant j'ai appris des choses sur les organisation de programantion et sur l'histoire de la programmation. Mais sur UML c'est assez vague, je sais que ca aide a faire de la prog objet mais que ca fait pas a ta place, que ca te fait des graphiques pour d'aider, ... etc.
Je suis pas encore beaucoup aller voir le reste du site, mais j'aimerais savoir a koi sa ressemble UML ! j'ai lu 2 pages et je sais toujours pas... c'est un programme ? un espece de language ? ca ce telecharge ??
Marsh Posté le 24-04-2003 à 23:29:45
euh... en fait c'est un languge c'est ca ??
vous pouvez me donner un petit exemple avec du php et uml ? pour que je puisse voir un peu a quoi ca ressemle tout ca...
Marsh Posté le 24-04-2003 à 23:42:15
Big-Foot a écrit : euh... en fait c'est un languge c'est ca ?? |
UML, c'est un peu comme de l'algo mais pour les langages object et ca a pour but de t'obliger a réfléchir sur la meilleure manière d'organiser ton code et tes données.
Grace a certaines règle, on évite certain progblème de malfaçon.
Personellement, j'ai jamais eu besoin de cette méthode de modélisation par ce que j'ai jamais fait beaucoup d'algo ou du moins pas au point d'en avoir besoin.
Marsh Posté le 25-04-2003 à 00:19:19
Big-Foot a écrit : euh... en fait c'est un languge c'est ca ?? |
ils viennent de changer de site visiblement... donc la page merde
mais sinon, c'était sympa comme explication :
"Planning your WebSite with UML"
Marsh Posté le 26-04-2003 à 13:17:30
merci, j'ai lu (la 2 eme page de l'article marche pas...)
mais svp donné moi un exemple concret avec de l UML et du php ! pask pour l'instant tout ce que j'ai vu c'est une facon de proceder et pas un language ou autre chose...
Marsh Posté le 26-04-2003 à 13:43:02
Big-Foot a écrit : merci, j'ai lu (la 2 eme page de l'article marche pas...) |
ben oui c'est ca ...c'est de la méthode. Différentes étapes de modélisation des besoins afin de parvenir au codage. Il existe ensuite des logiciels qui, a partir de la modélisation effectuée, réalise les classes et génére des bases de données.
Il faut distinguer les deux.
une bonne référence ( bonne approche ):
http://editions-eyrolles.com/php.a [...] 10708.php3
Marsh Posté le 26-04-2003 à 13:48:53
bon avant d'acheter un livre sur UML je decrait peu etre me mettre a la programation objet...
mais est ce qu'il y a des prgrammmes qui nous aident a faire les graphiques et tout ca ?
Marsh Posté le 26-04-2003 à 13:56:02
Big-Foot a écrit : bon avant d'acheter un livre sur UML je decrait peu etre me mettre a la programation objet... |
visio, rational rose et peut-être d'autres que je ne connais pas
Marsh Posté le 26-04-2003 à 16:48:10
simogeo a écrit : |
UML = langage de modélisation
ce n'est pas une méthode, c'est uniquement un ensemble de notations qui a pour but d'être compréhensible par les personnes concernées (y compris l'utilisateur final).
Il existe plusieurs méthodes (mais là c'est trop m'en demander).
exemples de modélisation :
http://www.duneram.com/casestudy/rose/login/
http://www.sparxsystems.com.au/use_case_model.htm
http://www.fe.up.pt/~jlopes/doc/conallen/
http://zend.com/zend/tut/tutorial-johnson2.php
Marsh Posté le 26-04-2003 à 17:06:40
ethernal a écrit : |
c'est pas une méthode au sens strict ....
considères ca comme un abus de langage
Marsh Posté le 27-04-2003 à 20:03:52
ok maintenant je sais ce que c'est UML
quelqu'un voudrai bien m'aider pour programmer un ptit truc en utilisant les objets ? je vous demande surtout pas de me donner un code tout fait, mais seulement de me dire quel seron les class etc...
Alors voila ce que je voudrai faire (c'est pour afficher les resultats d'un vote), je sais que c'est assez mal expliké... :
Code :
|
omega2 tu disait de reunir les connection a la bdd et tt les requettes en une class, comment faire pour y maitre tt les requettes ? je comprend pas vraiment je crois...
Marsh Posté le 28-04-2003 à 12:14:48
classe de connection ici :
http://www.phpfrance.com/tutorials [...] mysql.phps
Marsh Posté le 28-04-2003 à 12:42:29
Big-Foot a écrit : omega2 tu disait de reunir les connection a la bdd et tt les requettes en une class, comment faire pour y maitre tt les requettes ? je comprend pas vraiment je crois... |
Pas toutes les requêtes, mais la fonction d'envoie des requêtes a la base de donnée.
Tu fais tes requêtes a côté et tu la passes en paramêtre a la fonction de la classe en question qui l'envéra a la base de donnée.
Marsh Posté le 30-04-2003 à 23:23:20
alors j'ai regardé ce script de connection :
http://www.phpfrance.com/tutorials [...] mysql.phps
j'ai enlevé le control des erreur pour y voir + clair
ca donne ca :
Code :
|
d'abord pourquoi il y a des "return true;" ?
apres vous pouvez m'expliquer le fontionnement de ces 2 trucs que je comprend pas bien, merci
Marsh Posté le 30-04-2003 à 23:25:50
return true lorsque tout s'est deroulé correctement dans la fonction.
Code :
|
pour l'autre exemple c'est pareil ....
Marsh Posté le 30-04-2003 à 23:34:32
oki, et pour le return true ou false, c'est toujours comme ca avec cet foncon de programmer ?
Marsh Posté le 30-04-2003 à 23:35:45
Big-Foot a écrit : oki, et pour le return true ou false, c'est toujours comme ca avec cet foncon de programmer ? |
c'est le programmeur qui décide .. ... disons que c'est une bonne habitude .....ca t'evite d'aller plus loin si ca déconne.
Marsh Posté le 30-04-2003 à 23:42:26
donc si le script devient gros c'est une bonne habitude quoi
Marsh Posté le 30-04-2003 à 23:51:04
Big-Foot a écrit : donc si le script devient gros c'est une bonne habitude quoi |
c'est une bonne habitude.
Marsh Posté le 30-04-2003 à 23:56:29
mais dans certaines fonctions de ce script ca retourne true ou false sans aucune condition et la ca sert a quoi exactement ? la condition est deja géré par le php a la base ?
Marsh Posté le 01-05-2003 à 00:00:42
Big-Foot a écrit : mais dans certaines fonctions de ce script ca retourne true ou false sans aucune condition et la ca sert a quoi exactement ? la condition est deja géré par le php a la base ? |
ou ?
Marsh Posté le 01-05-2003 à 00:04:30
là :
Code :
|
Marsh Posté le 26-03-2003 à 19:13:27
bonjours !
Je me demande si en php il veut mieu programmer de facon procedurale ou plutot en utilisant beaucoup les objets ? C'est quoi le plus repide ? et dans quel situations ?
merci