IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[POO] Conseils pour conception logicielle en php [Fait]


Sujet :

Langage PHP

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Inscrit en
    Avril 2007
    Messages
    219
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 219
    Par d�faut [POO] Conseils pour conception logicielle en php
    Bonjour, je suis en train de d�velopper un projet en php enti�rement objet destin� au public d'un centre de formation pour adultes (gestion des stagiaires - parcours de formation - �valuations...). Ayant bien avanc�, je me suis aper�u que mes classes avaient beaucoup de m�thodes et de traitements en commun, et je me disais que le code pouvait �tre r�duit de 50% par le biais de l'h�ritage. J'ai �tudi� la chose d'abord en java, mais impossible � mettre en place (pas de serveur assez costaud + temps de d�veloppement restreint). Je me suis aper�u que la chose �tait beaucoup moins facile en php. Voici par exemple une m�thode statique charg�e de g�n�rer la liste des �l�ments pr�sents dans une table de la base de donn�es (celles ci sont organis�es par "objets-m�tier"): elle est pr�sente dans chaque classe (Formation, Stagiaire, Module...). Seuls le nom de la table dans la requ�te et le type de l'objet instanci� varient selon les classes:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public static function getListe() {
    		$i = 0;
    		$formations = array();
    		$sql = "SELECT id FROM formation ORDER BY libelle";
    		$query = mysql_query($sql);
    		if(mysql_num_rows($query) == 0) return null;
    		else {
    			while($datas = mysql_fetch_object($query)) {
    				$formations[$i++] = new Formation($datas->id);
    			}
    			return $formations;
    		}
    	}
    Comment placer cette m�thode dans une classe parente afin qu'elle puisse �tre impl�ment�e et convenir � toutes les classes filles? J'ai pens� au passage de param�tres pr�cisant les �l�ments variables (requ�te, nom de la classe) mais je perds beaucoup du principe objet et je me rapproche d'une fonction banale.

  2. #2
    Membre chevronn�
    Profil pro
    Inscrit en
    D�cembre 2007
    Messages
    424
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 424
    Par d�faut
    Je crois que php n'accepte pas l'h�ritage multiple, et c'est bien dommage, je comprend pas pourquoi il l'ont pas introduit dans la version 5

  3. #3
    Membre �clair� Avatar de daajack
    Inscrit en
    Octobre 2007
    Messages
    97
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 97
    Par d�faut
    Effectivement l'h�ritage multiple n'est pas possible, mais il y a peut-�tre moyen de contourner le probl�me. Je n'ai pas bien compris ta structure de classe, il y a donc plusieurs classe Formation, Stagiaire, Module, et la fonction getListe() qui retourne un tableau d'objets Formation dans ton exemple elle se situe o� ?

  4. #4
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Ao�t 2006
    Messages
    2 760
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Ao�t 2006
    Messages : 2 760
    Par d�faut
    Bonjour,

    Plusieurs possibilit�s existent, mais si c'est � cause du type d'objet instanci� que tu coinces, il te suffit d'utiliser un pattern factory pour instancier ton objet.
    Faut que je retrouve le lien, il y a avait un bon tuto l�-dessus ici-m�me je crois...

    Cela d�montre s'il le fallait que l'h�ritage multiple n'est pas franchement utile, que ce soit en php ou en java.

  5. #5
    Membre confirm�
    Inscrit en
    Avril 2007
    Messages
    219
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 219
    Par d�faut
    Voici la structure de l'application: la base de donn�es est constitu�e de tables repr�sentant chacune un objet-m�tier: stagiaire, formation, module, formateur... et les classes sont calqu�es sur ces tables: Stagiaire... Chaque classe dispose de leurs propres m�thodes de traitement: getListe() pour obtenir un tableau d'objets correspondant au type souhait�, les m�thodes de traitement traditionnelles concernant l'encapsulation des champs priv�s getID(), getNom()... Ces m�thodes sont redondantes dans chaque classe � quelques mots ou variables pr�s; je pense que si je peux "g�n�raliser" ces m�thodes � toutes les classes, ces derni�res se retrouveraient all�g�es d'un cinquantaine de lignes de code et seraient plus lisibles pour un d�veloppeur devant �diter le programme.
    De plus, il me semble que php n'autorse pas la surcharge et la red�finition des m�thodes, ce qui n'aide pas.

  6. #6
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Ao�t 2006
    Messages
    2 760
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Ao�t 2006
    Messages : 2 760
    Par d�faut
    Une classe abstraite pourrait faire l'affaire aussi pour la red�finition de m�thodes (abstraites pour le coup), non ?

  7. #7
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Ao�t 2006
    Messages
    2 760
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : Ao�t 2006
    Messages : 2 760

  8. #8
    Membre confirm�
    Inscrit en
    Avril 2007
    Messages
    219
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 219
    Par d�faut
    Tr�s int�ressant! C'est �� qu'il me faut, merci pour les liens En fait j'aimerais pouvoir effectuer des traitements communs selon une reconnaissance automatique du type d'objet (Ex: Classe->traitement() selon le type d'objet, pas forc�ment connu au moment du traitement)

  9. #9
    Membre chevronn�
    Profil pro
    Inscrit en
    D�cembre 2007
    Messages
    424
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 424
    Par d�faut
    Je viens de voir un truc interessant uniquement avec php 5, on peux surcharger les m�thode __set, __get, __isset, __unset

    Surcharge en php5

Discussions similaires

  1. [POO] conseils pour creation site en PHP Objet
    Par Clorish dans le forum Langage
    R�ponses: 8
    Dernier message: 05/06/2008, 23h18
  2. Demande de Conseils pour migrer php4 vers php 5
    Par Apprentilinux dans le forum Langage
    R�ponses: 1
    Dernier message: 31/03/2008, 19h06
  3. [POO] Conseils pour impl�mentation d'un catalogue
    Par SPKlls dans le forum Langage
    R�ponses: 2
    Dernier message: 24/01/2008, 00h06
  4. conseil pour conception de base
    Par karidrou dans le forum Mod�lisation
    R�ponses: 1
    Dernier message: 16/01/2007, 18h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo