Débuts en POO

jipe32 Messages postés 277 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 11 mai 2010 - 11 mai 2010 à 09:23
jipe32 Messages postés 277 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 11 mai 2010 - 11 mai 2010 à 16:44
Bonjour à tous,
Après une longue absences, je reviens sur PHPCS pour un projet qui me tiens à coeur.
Je suis entrain d'apprendre la POO en PHP, et il parait que je n'arrive pas à penser en OO...
Je me suis donc lancer dans la création d'un exemple simple pour tenter de comprendre, et j'aimerais votre aide pour me former au mieux.

Tableau:
Imaginons que sur mon site, j'ai un système de news. Sur la page d'accueil, la dernière news postée est affichée. En passant par la page des news, on peut voir tous les titres de news, et cliquer sur celle qu'on veut lire. L'administrateur peut, lui, en ajouter, en supprimer et en modifier.

Et en OO:
J'ai pensé à faire une classe en voyant ma news comme un objet. C'est à dire faire une classe News avec différentes méthodes du genre GetLast(), Read(), Update(), Add() et Delete().
Bien sûr, j'en suis arrivé là après reflexion sur le thème: "Ma news est un objet, qu'est ce que je peux faire avec?"

Je voudrais savoir si c'est la bonne façon de penser, bonne façon de concevoir les choses.
Comment faut-il penser pour faire de L'OO en PHP (et dans les autres langages aussi).

Merci d'avance pour vos réponses.


JiPe32
<:)))>< Go Fish
SVP, Lisez Le Règlement, Et Validez Les Réponses Qui Vous Ont Aidées <a href="http://www.web-stockage.com/

8 réponses

Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
11 mai 2010 à 09:49
Bonjour :)

C'est pas pour faire de la pub sur ma source mais j'ai travaille sur quelque chose qui pourrai t'interesser parce que elle traite de ce sujet au sens POO et aussi au sens syntaxique et formalisme du code d'une classe image d'une table :

http://www.phpcs.com/codes/DBOC-V3-AJAX-PHP5_51656.aspx

Concretement le code que tu imagine est facilement generable car effectivement on a des opperation de base a faire sur une table GetLast(), Read(), Update(), Add() et Delete() etc.

Sinon pour ce qui est de penser objet en php c'est exactement pareil que dans les autres langague avec quelques mecanismes en moins, sa passe par beaucoup de reflexion a la structure des classes, leur utilite et leur sens (est elle pertinente ou non).

Comme tu est en objet il faut essayer d'utiliser au mieux ses mecanismes et en php je pense plutot a l'heritage et aux interface / classes abstraites.

Rien ne vaut un bon diagramme de classe avant de se lancer :)

Pour commencer la premiere classe que tu devrai faire c'est ton abstraction de base de donnee (DBA.php dans ma source) c'est tres formateur est simple a realiser.

Bon courage a toi !
0
jipe32 Messages postés 277 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 11 mai 2010
11 mai 2010 à 09:56
Merci pour ta réponse...

Je vais aller voir ta source dans un petit moment.
Quand tu dis que je devrais faire une abstraction de BDD, en gros, c'est faire une classe qui gère les accès à la BDD, comme PDO?
Car j'utilise PDO pour mon projet, et je ne vois pas trop ce que tu veux dire.

De plus, pourrais tu détailler la facon de penser en objet stp, car ça reste encore "trop" flou dans mon esprit...

Merci d'avance.


JiPe32
<:)))>< Go Fish
SVP, Lisez Le Règlement, Et Validez Les Réponses Qui Vous Ont Aidées
0
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
11 mai 2010 à 10:11
Une classe qui abstrait l'acces a la BD et qui peux utiliser PDO :)
PDO se suffit a lui meme mais pour ma source je ne l'utilise pas parce qu'elle n'est faite que pour les bases de donnees mysql et utiliser PDO est plus lourd que les fonction php destinees a manipuler une base mysql.

Pour etre plus precis tu pourrai avoir besoin d'une classe qui utiliserai PDO et qui pourrai faire des traitements suplementaires post requete sql.

C'est moins evident si tu utilise PDO c'est sur mais par exemple dans mon cas le but de cette classe etait le meme que celui de PDO :
lancer une connexion a la BD, executer une requete puis renvoyer le resultat sous la forme d'un tableau.

En fait faire une abstraction de DB c'est un bon debut pour comprendre l'interet et le fonctionnement d'une classe et aussi apprendre a implementer un Singleton en php, quand j'ai commence la POO c'est la premiere classe que j'ai faite :)
0
jipe32 Messages postés 277 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 11 mai 2010
11 mai 2010 à 11:19
Pourrais tu m'envoyer ta classe pour que je regarde un peu à quoi correspond l'abstraction de BDD...
J'ai bien trouvé deux trois exemples sur le net, je n'arrive pas à me faire une idée.

Merci d'avance,

JiPe32
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
11 mai 2010 à 11:32
Elle est dans la source, dossier inc/class/DBA.php
0
jipe32 Messages postés 277 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 11 mai 2010
11 mai 2010 à 12:17
Merci,
Je viens de lire ta classe, et en fait je me rends compte que je faisais pareil dans une classe Main...
En gros j'avais trois méthodes, a savoir Read(), Add(), Delete().
Elles avaient toutes les trois le code minimal et le reste était passé en argument dans la méthode.

Je me rappel que j'avais bloqué avec PDO, mais je pense savoir comment m'en sortir...

En gros, une classe d'abstraction de BDD est utile si pour une raison ou un autre, on change de SGBD, on aie pas à se retaper toutes les requêtes SQL de chaque méthodes/fonctions?

J'apprends pas à pas la POO avec la vidéo de Grafikart, et il à une classe Model qui correspond un peu à ta classe DBA.
0
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
11 mai 2010 à 13:30
Oui c'est exactement ca PDO, il gere les drivers pour toi quelque soit le type de base, mais une abstraction de base de donnee peu etre plus minimale en se contentant d'agir que sur une type de base, son but etant d'eviter d'avoir a se connecter a la base systematiquement en dur dans tout ses script et aussi de simplifier grandement l'execution d'une requete sur la base.
PDO integre aussi le systeme de commit / rollback un autre d'exemple de fonctionnalite d'une abstraction :)
0
jipe32 Messages postés 277 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 11 mai 2010
11 mai 2010 à 16:44
Dans ce cas là, je ne vois pas pourquoi devoir me coder une abstraction de BDD si PDO le fait déjà.
Surtout que je vais devoir le faire avec PDO, vu que PHP6 ne tiendra plus compte des mysql_ et mysqli_ ...
0
Rejoignez-nous