OVH Cloud OVH Cloud

Methode de conception objet en PHP5

6 réponses
Avatar
TigrouMeow
Bonjour,

J'ai developpe sous PHP3, donc il y a un moment, et je veux recoder mes
sites en utilisant PHP5 et en gardant au maximum une meme architecture de
base entre mes sites.

Je fais regulierement de l'objet que ce soit en C++, Java, ou C#, mais
j'avoue que pour un site Web j'ai du mal a penser correctement a la
conception.

Ce que je pensais, c'est faire une classe INSCRIT, qui contient tous les
elements d'un inscrit, apres plusieurs methodes par exemple : une methode de
verification de la validite des donnees (par exemple est ce que la variable
nom contient bien seulement des caracteres), une methode d'inscription (pour
inscrire cet instance d'inscrit dans la base de donnees pour finaliser
l'inscription)... Ensuite je fais la meme chose en gros avec une classe
ARTICLE, et je cree aussi une classe ARTICLEMANAGER, qui permet de gerer
plusieurs articles : elle contiendrait par exemple une methode
ObtenirLesArticlesRecents ;) Et ca me renverrai un tableau d'instances
d'ARTICLE.

Merci de me corriger si je dis n'importe quoi... mais si je poste ici c'est
que ca me semble etonnant si j'ai juste :)

--
Meow ;o)

6 réponses

Avatar
Guillaume Bouchard
TigrouMeow wrote:
Bonjour,


Bonjour.

J'ai developpe sous PHP3, donc il y a un moment, et je veux recoder mes
sites en utilisant PHP5 et en gardant au maximum une meme architecture de
base entre mes sites.


Je t'arrete de suite. Pése le rapport temps/interet. Si cela marche trés
bien en place, pourquoi te prendre la tete à utiliser quelque chose que
tu ne maitrises pas encore et qui ne va t'apporter que des ennuis au
départ. (Et je ne suis même pas certain que cela t'apporte du benefice)

Je fais regulierement de l'objet que ce soit en C++, Java, ou C#, mais
j'avoue que pour un site Web j'ai du mal a penser correctement a la
conception.


Je n'ai jamais fais serieusement d'objet, je commence un peu en Python
en se moment je peux te dire que de tout ce que je découvre de genial
dans l'objet, rien n'est appliquable au web.

La seul amélioration significative que j'ai pu trouvé c'est de faire
quelque chose du style chaine.strip(a).truc(b).replace(c) plutôt que
remplace(split(truc(chaine),a),b),c)
Mais je ne sais même pas si php5 apporte un outils de ce style, sauf à
recrée sa propre class string, mais là tu y perd.

Je ne me bas pas CONTRE l'objet, juste contre l'inutilité de faire de
l'objet quand la même chose est déjà fait avec des fonctions.

Ce que je pensais, c'est faire une classe INSCRIT


Jusque là rien ne me choque.

qui contient tous les
elements d'un inscrit, apres plusieurs methodes par exemple : une methode de
verification de la validite des donnees (par exemple est ce que la variable
nom contient bien seulement des caracteres)


Rien à faire dans la méthode inscrit cela... Tu peux trés bien à avoir à
vérifier que ta variable toto est propre sans que toto soit le nom d'un
inscrit. (Comme tu verifies toutes tes variables avant de faire quoi que
ce soit, il n'y a aucune raisons qu'un nom erroné arrive dans la classe)


, une methode d'inscription (pour
inscrire cet instance d'inscrit dans la base de donnees pour finaliser
l'inscription)


Il est inscrit ? Il n'a donc pas de methode inscription...

AMHA, pour penser vraiment en objet, il faut l'objet visiteur, l'objet
inscrit, qui derive de visiteur et l'objet admin qui derive des deux...
(Et encore...)

Ensuite je fais la meme chose en gros avec une classe
ARTICLE, et je cree aussi une classe ARTICLEMANAGER, qui permet de gerer
plusieurs articles : elle contiendrait par exemple une methode
ObtenirLesArticlesRecents ;) Et ca me renverrai un tableau d'instances
d'ARTICLE.


En clair tu encapsules des fonctions qui existent déjà dans une classe.

Merci de me corriger si je dis n'importe quoi... mais si je poste ici c'est
que ca me semble etonnant si j'ai juste :)


Je laisse au prop objet le soin de te corriger car j'avoue que je n'y
connais rien, mais médite quand même ce que j'ai écrit.

--
Guillaume
"Qu'entendez vous par code portable ? Je vous le met sur un cédéraume ?"

Avatar
dmetzler
euuuhhhh..... ce qui serait pas mal c'est que tu nous dise ce que tu
veux vraiment faire avec ton site. A part la gestion des inscrits et
des articles, on ne sait pas vraiment trop là !


Pour ma part, quand je fais de l'objet en php, je mets d'un coté les
classes métiers (article, articlemanager etc...). Ces classes
permettent de gérer mes objets métier, et je peux très bien les
utiliser avec autre chose qu'une page web (par exemple un script php en
console).

J'ai d'un autre coté des templates (j'utilise pour ma part Smarty) qui
me permettent de séparer la logique de la vue. Et au milieu des deux
un controleur qui gère les requêtes (opÞl&id=1 ou op=new etc...),
les demandes au objets métier et ensuite remplit les champs de la vue.


Pour gérer tout ça j'ai aussi ce que l'on appelle un FrontControler
qui me choisit le controleur à utiliser en fonction du module où l'on
se trouve.

C'est ma méthode et elle n'est bien sur pas unique et certainement pas
optimale pour certains.
Avatar
bruno modulix
Guillaume Bouchard wrote:
(snip)
Je n'ai jamais fais serieusement d'objet, je commence un peu en Python
en se moment je peux te dire que de tout ce que je découvre de genial
dans l'objet, rien n'est appliquable au web.


Si si. Beaucoups de choses. Regarde Zope ou Ruby on Rails, tu verra que
l'OO a tout à fait sa place dans ce domaine...

Par contre, l'intérêt de l'objet *en PHP* est plus restreint, le langage
restant essentiellement procédural.

--
bruno desthuilliers
ruby -e "print ''.split('@').collect{|p|
p.split('.').collect{|w| w.reverse}.join('.')}.join('@')"

Avatar
TigrouMeow
"" a écrit dans le message
de news:
euuuhhhh..... ce qui serait pas mal c'est que tu nous dise ce que tu
veux vraiment faire avec ton site. A part la gestion des inscrits et
des articles, on ne sait pas vraiment trop là !


En fait pour l'instant je fait la base pour plusieurs sites que je veux
refaire, du coup y'a toujours des articles (des news) et des
inscriptions. Y'a aussi la gestion de l'affichage des pages, je
sais pas du tout comment faire encore, en tout cas y'aura
smarty au milieu c'est certain.

Pour ma part, quand je fais de l'objet en php, je mets d'un coté les
classes métiers (article, articlemanager etc...). Ces classes
permettent de gérer mes objets métier, et je peux très bien les
utiliser avec autre chose qu'une page web (par exemple un script php en
console).

J'ai d'un autre coté des templates (j'utilise pour ma part Smarty) qui
me permettent de séparer la logique de la vue. Et au milieu des deux
un controleur qui gère les requêtes (opÞl&id=1 ou op=new etc...),
les demandes au objets métier et ensuite remplit les champs de la vue.

Pour gérer tout ça j'ai aussi ce que l'on appelle un FrontControler
qui me choisit le controleur à utiliser en fonction du module où l'on
se trouve.

C'est ma méthode et elle n'est bien sur pas unique et certainement pas
optimale pour certains.


En fait ce que j'aimerais bien voir c'est un diagramme des classes pour
voir comment un site est fait en objet, j'ai google a fond mais je n'ai
trouve aucun exemple... (sinon a au pire j'irai a la fnac de chatelet je
trouverai bien un bouquin...)

Avatar
laurent
bruno modulix wrote:
Guillaume Bouchard wrote:
(snip)

Je n'ai jamais fais serieusement d'objet, je commence un peu en Python
en se moment je peux te dire que de tout ce que je découvre de genial
dans l'objet, rien n'est appliquable au web.



Si si. Beaucoups de choses. Regarde Zope ou Ruby on Rails, tu verra que
l'OO a tout à fait sa place dans ce domaine...

Par contre, l'intérêt de l'objet *en PHP* est plus restreint, le langage
restant essentiellement procédural.


oui, et ca apporte beaucoup en lisibilité, en qualité de code et en
maintenabilité.


Avatar
bruno modulix
laurent wrote:
bruno modulix wrote:

(snip)


Par contre, l'intérêt de l'objet *en PHP* est plus restreint, le
langage restant essentiellement procédural.


oui, et ca apporte beaucoup en lisibilité, en qualité de code et en
maintenabilité.


Quoi ? Le fait que PHP soit plus procédural qu'objet ? Ou l'utilisation
de l'approche OO en PHP ?

--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in ''.split('@')])"