Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1859 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Poo avec php, interaction entre objets

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Poo avec php, interaction entre objets

n°2099345
scull
MySCULL cay bon mangez en!
Posté le 03-09-2011 à 12:40:14  profilanswer
 

Bonjour,
 
Je cherche à développer un site avec php en poo.
J'ai lu beaucoup de tuto à ce sujet, mais comme bien souvent les exemples sont trés théoriques et peu transposable à un projet concret. Bref...
 
J'ai cru comprendre qu'il faut considérer mysql comme un objet, et j'ai donc récupérer une classe php trés bien faite sur github (pourquoi réinventer la roue ?)
 
Du coup je m'attaque à mon objet "article" et je me rend compte que pour manipuler mes articles (affichage notament) j'ai besoin "d'actions" avec mysql : logique.
De trés bon tutos et dépots sur github, font directement appels dans l'objet "article" à des requetes sql.
 
Seulement si demain je change ma class mysql, je vais devoir modifier tout mes objets (objet article) qui y fait appel... et du coup mes "objets" ne sont plus manipulable indépendamment des uns des autres...
 
Je ne sais pas si je suis trés clair, mais j'aimerai avoir votre avis et votre façon de procéder :jap:


---------------
Créer son forum gratuit |  Mon beau blog phpBB caÿ le mal :o
mood
Publicité
Posté le 03-09-2011 à 12:40:14  profilanswer
 

n°2099349
provencal_​le_gaulois
Posté le 03-09-2011 à 13:57:24  profilanswer
 

Hello,
 
Je commence juste le dév en POO pour ma part. Je n'y connaissais pas grand chose, mais j'ai suivi un tuto (en anglais) qui m'a bien aidé ces temps-ci :
 
http://www.elated.com/articles/cms [...] php-mysql/
 
Le mec explique comment créer une classe "Article" de base avec différents paramètres. Perso j'ai adapté tout ça pour créer d'autres classes (des produits et des revendeurs dans mon cas) et c'est assez souple à utiliser je trouve !
 
Donc, en prenant l'exemple de ce tuto, si demain tu dois modifier ta classe "Article", il te faudra renommer toutes les références à celles-ci sur les pages où tu y fais référence, c'est-à-dire dans ce cas précis les pages index.php et admin.php qui rassemblent les différentes fonctions et font référence aux méthodes utilisées dans ta classe (je sais pas si je suis très clair  :lol: )
 
Enfin voilà, le mieux encore est de tester et de bidouiller soi-même quelques heures pour bien en comprendre les mécanismes !


---------------
"Goldie."
n°2099367
scull
MySCULL cay bon mangez en!
Posté le 03-09-2011 à 15:35:32  profilanswer
 

Merci pour le lien, en effet c'est un trés bon tuto bien parlant et je retrouve dedans mon interrogation :  
 
Dans la class Article -> function delete j'ai un  

Code :
  1. $conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
  2.     $st = $conn->prepare ( "DELETE FROM articles WHERE id = :id LIMIT 1" );


 
mais si demain, je change ma class qui gère mysql, je vais devoir éditer tous les appels à la précédente class ?


---------------
Créer son forum gratuit |  Mon beau blog phpBB caÿ le mal :o
n°2099368
caribouuu
Posté le 03-09-2011 à 15:43:10  profilanswer
 

ben ouais, si tu remplaces une classe par une autre, forcément tu risques de devoir faire des modifications au niveau de tout ce qui faisait appel à cette classe.

Message cité 1 fois
Message édité par caribouuu le 03-09-2011 à 15:44:11

---------------
Bla (blaa bbla)
n°2099371
art_dupond
je suis neuneu... oui oui !!
Posté le 03-09-2011 à 16:04:50  profilanswer
 

Tu pourrais faire hériter tes classes d'une classe DB qui gèrerait les actions ? Ou utiliser un ORM (propel, doctrine...) ?


---------------
oui oui
n°2099963
sircam
I Like Trains
Posté le 06-09-2011 à 20:19:08  profilanswer
 

scull a écrit :

Merci pour le lien, en effet c'est un trés bon tuto bien parlant et je retrouve dedans mon interrogation :  
 
Dans la class Article -> function delete j'ai un  

Code :
  1. $conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
  2.     $st = $conn->prepare ( "DELETE FROM articles WHERE id = :id LIMIT 1" );


 
mais si demain, je change ma class qui gère mysql, je vais devoir éditer tous les appels à la précédente class ?


Avec ton PDO, tu n'es pas dépendant du DBMS. J'ai peut-être pas bien compris mais "delete" est une méthode de "Article", non?
 
Au sinon tu peux découpler ton entité Article des opérations accès DB, façon JEE, et te retrouver avec un anemic domain model qui n'a heureusement pas encore la cote en PHP.
 
Il y a toujours une balance à faire entre découplage à l'extrême (avec complexité accrue) et risque de devoir faire des modifs (avec complexité moindre au départ)


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°2100071
Tirkyth
Posté le 07-09-2011 à 11:31:28  profilanswer
 

scull a écrit :

mais si demain, je change ma class qui gère mysql, je vais devoir éditer tous les appels à la précédente class ?


 

caribouuu a écrit :

ben ouais, si tu remplaces une classe par une autre, forcément tu risques de devoir faire des modifications au niveau de tout ce qui faisait appel à cette classe.


 
Si c'est une de tes grandes préoccupations, je te suggère de bâtir ton projet autour d'un injecteur de dépendances. Deux exemples ici :
http://pimple.sensiolabs.org/
https://github.com/symfony/DependencyInjection (L'injecteur de dépendance de Symfony2, mais étant donné qu'il n'a pas de documentation intégrée tu risques de galérer à l'intégrer)


---------------
Mon Feedback !
n°2101575
scull
MySCULL cay bon mangez en!
Posté le 14-09-2011 à 19:25:32  profilanswer
 

provencal_le_gaulois a écrit :

Hello,
 
Je commence juste le dév en POO pour ma part. Je n'y connaissais pas grand chose, mais j'ai suivi un tuto (en anglais) qui m'a bien aidé ces temps-ci :
 
http://www.elated.com/articles/cms [...] php-mysql/
 
Le mec explique comment créer une classe "Article" de base avec différents paramètres. Perso j'ai adapté tout ça pour créer d'autres classes (des produits et des revendeurs dans mon cas) et c'est assez souple à utiliser je trouve !
 
Donc, en prenant l'exemple de ce tuto, si demain tu dois modifier ta classe "Article", il te faudra renommer toutes les références à celles-ci sur les pages où tu y fais référence, c'est-à-dire dans ce cas précis les pages index.php et admin.php qui rassemblent les différentes fonctions et font référence aux méthodes utilisées dans ta classe (je sais pas si je suis très clair  :lol: )
 
Enfin voilà, le mieux encore est de tester et de bidouiller soi-même quelques heures pour bien en comprendre les mécanismes !


Merci pour ce trés bon lien cher Avignonais ;)
 
J'ai commencé à créer d'autre classe à partir de la classe Article, et j'ai notamment déplacer la connexion PDO. Du coup je l'incorpore avec un "global $conn;"
 
Par contre j'ai un message étrange "Fatal error: Call to a member function prepare() on a non-object" on line 45
 
 

Code :
  1. public static function getList( $numRows=1000000, $order="publicationDate DESC" ) {
  2.     //$conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
  3.     global $conn;
  4.     $sql = "SELECT SQL_CALC_FOUND_ROWS *, FROM cat
  5.             ORDER BY " . mysql_escape_string($order) . " LIMIT :numRows";
  6.     $st = $conn->prepare( $sql );
  7.     $st->bindValue( ":numRows", $numRows, PDO::PARAM_INT );
  8.     $st->execute();
  9.     $list = array();
  10.     while ( $row = $st->fetch() ) {
  11.       $article = new Categorie( $row );
  12.       $list[] = $article;
  13.     }
  14.     // Now get the total number of articles that matched the criteria
  15.     $sql = "SELECT FOUND_ROWS() AS totalRows";
  16.     $totalRows = $conn->query( $sql )->fetch();
  17.     $conn = null;
  18.     return ( array ( "results" => $list, "totalRows" => $totalRows[0] ) );
  19.   }


 
Etrange car si je remet la ligne de connexion PDO, je n'ai plus le message... Une idée ?


---------------
Créer son forum gratuit |  Mon beau blog phpBB caÿ le mal :o

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Poo avec php, interaction entre objets

 

Sujets relatifs
Lire les propriétés des objets d'un tableauinteraction SDL et directX
Aide Interaction entre 2 JComboBoxPOO d'un programme musical.
comment charger des objets de sécu : certif, clefs, type de chiffremenJava et arraylist d'objets
Probleme sur mes objets ecouterPOO, Ada.Finalization
Problème POO et execution de fonction[Python] Comparer rapidement 10'000 objets, besoin d'aide
Plus de sujets relatifs à : Poo avec php, interaction entre objets


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR