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] Avantages de la programmation orientée objet en PHP 5 [Débat]


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut [POO] Avantages de la programmation orientée objet en PHP 5
    Pour php 5 je suis pas super avancé donc si je peux avoir un lien vers un exemple de clase statique ca m'aiderait

    Sinon j'ai pas vu dans la doc les jours férié....


    [Edit] Cette discussion a été déclenchée par : http://www.developpez.net/forums/sho...d.php?t=368192

  2. #2
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Définition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    abstract class Calendar
    {
       public static function frenchDate($date)
       {
             $temp = explode("-",$date);
             $res = $temp[2]."/".$temp[1]."/".$temp[0];
             return($res);
       }
    }
    Appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo Calendar::frenchDate($date);

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut
    Oki merci j'ai compris cette utilisation.

    Mais quel avantage de le mettre dans une classe?

  4. #4
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    Plus facile à standardiser, à transporter d'une appli à l'autre, plus facile de s'en rappeler (un appel à une classe, un fichier...)

    Ha oui, ne pas oublier : il est plus facile à lire une classe, quand il n'y en a qu'une par fichier PHP (Pour l'homme, bien sur).

    La classe fait tout de suite "pro", et organise mieux la présentation (facilité de lecture, de modification, de maintenance...)

    Bref, que des avantages !!!!

    Et puis, l'avantage le plus important : laisser tomber le procédurale, pour passer à l'Objet qui représente l'avenir de PHP....

  5. #5
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Un autre avantage est de permettre de regrouper les fonctions dans des sortes de namespaces. Cela te permet de féfinir 2 classes différentes avec des méthodes aux noms en commun mais au comportement différent. C'est le principe du design pattern Factory, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    // class PDF
    // class SWF
    // class PPT
     
    abstract class DocumentFactory
    {
       public static function create($fileName)
       {
         // extraire $extension depuis $fileName
     
          switch($extension)
          {
              case 'pdf':
                 return new PDF($fileName);
              break;
     
              case 'swf':
                  return new SWF($fileName);
              break;
     
              case 'ppt':
                  return new PPT($fileName);
              break;
       }
    }
    Imagine que les classes 3 PDF, SWF et PPT partagent les mêmes noms de méthodes, alors tu obtiens une classe DocumentFactory permettant de générer soit un PDF soit un SWF soit un PPT avec le même code applicatif, simplement en changeant le nom du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $document = DocumentFactory::create('test.pdf');
    //$document = DocumentFactory::create('test.swf');
    //$document = DocumentFactory::create('test.ppt');
     
    // Appels indifféremment de la class réelle de $document :
    $document->page(...);
    $document->titre(...);
     
    $document->page(...);
    $document->text(...);
    $document->text(...);
     
    $document->page(...);
    $document->text(...);
     
    $document->save(...);

  6. #6
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    Héhé c'est marrant, je suis en plein dedant

    Sauf que ma classe à moi, elle s'appelle FactoryDocument !!!

  7. #7
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    C'est un document d'usine (FactoryDocument) ou bien une usine de documents (DocumentFactory) ?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut
    Merci des explications.

    C'est vrai que dans un programme java j'arrive a voir l'interet des objets, autant en php j'ai du mal mais bon

  9. #9
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    ..Je vois pas ou tu as du mal :

    Si tu réalise une application en PHP (même un site Internet...) qui fait plusieurs milliers de lignes de code, il est plus simple de maintenir de l'Objet.

    Par exemple, en ce moment je suis sur une appli de plusieurs centaines de fichiers PHP (1080 exactement...), en procédurale je ne m'y retrouverai jamais. En plus, au fur et à mesure des évolutions, en procédurale tu dois effacer, réécrire, revenir en arrière, puis en avant pour voir les répercutions, etc....

    Depuis le début de mon projet, grace à l'objet, je n'ai effacé AUCUNE ligne de ode, je n'ai fait que faire évoluer mon code en éditant mes classes, sans quasiment toucher au code d'appel.

    L'objet simplifie le développement, si tu vois l'intéret en JAVA, je vois pas pourquoi tu ne le vois pas en PHP ?

    L'objet n'est pas réservé qu'au C++ ou au JAVA, il faut voir un intéret général plutot que particulier.

    Python, Ruby, JavaScript, PHP sont tous des langages Objet.

    De plus, avec l'Objet tu peux REELEMENT capitaliser ton code (c'est ce que tu veux faire avec tes fonctions, là....), alors que les fonctions procédurales devront toujours s'adapter aux particularités d'un projet.

    EDIT : sans passer pour un troll, j'oubliais de citer les langages de classe "inférieurs", et de m...... : .NET, C#, ASP etc...

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut
    En fait comme j'ai jamais vu d'exemple de code concret objet en php j'arrive pas a voir ce que ca donne.

    Maintenant si je vois un projet et qu'on m'explique le raisonnement peut être que je verrais les choses autrement ;-)

  11. #11
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 147
    Points : 109
    Points
    109
    Par défaut
    je suis moi même en plein dans le poo en php et je dois avouer que j'ai du mal aussi à réfléchir son site en terme d'objet.
    Quel genre de classe trouve t'on souvent dans un site ? Ca serait bien des exemples de code comme le dit zulot.


    Citation Envoyé par viviboss
    Depuis le début de mon projet, grace à l'objet, je n'ai effacé AUCUNE ligne de ode, je n'ai fait que faire évoluer mon code en éditant mes classes, sans quasiment toucher au code d'appel.
    Est-ce que tu fais une séparation du code html avec le php quand tu programmes en POO ? Sinon est-ce génant pour la maintenance sachant qu'il y a également une feuille de style css externe.

  12. #12
    Membre averti

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 206
    Points : 319
    Points
    319
    Par défaut
    Par exemple j'ai créer une classe SQLManager (dispo dans la section Contribuez) qui permet de générer les requêtes , les exécuter et renvoi les résultats sous forme de tableau. Elle détecte aussi les fonctions SQL pour éviter de mettre des quotes aux valeurs, sinon elle les places seule. Pour des requêtes complexes (INNER JOIN et tout le tra la la) elle ne peut pas mais tu peut créer la requete toi même et l'executer quand même, je peut inséré, extraire et mettre à jour avec. Sans les classes à chaque requête il aurait fallu que je mette tout le code pour faire la requete, la lancée , parcourir les résultat pour les mettre dans un tableau final, au final je gagne beaucoup de temps et simplifie le code final.

    En gros image que tu dois faire un grooos jeu Lego mais c'est toi qui construit aussi les briques et elles sont pas toutes rectangulaires

  13. #13
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 501
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 501
    Points : 6 086
    Points
    6 086
    Par défaut
    sincèrement, vous aurez beau expliquer, une personne ne va pas forcement comprendre. C'est pas quelque chose de facile à comprendre d'un coup la notion objet surtout après plusieurs années de procédurale. Il faut que la personne code un peut en objet pour commencer à comprendre le principe. Malgré les exemples que vous faites ça n'aide pas forcement. il faut mettre le nez dedans pour avoir la révélation ou faire totalement abstraction à la programmation et faire une comparaison avec ce qui nous entoure dans notre vie car la notion d'objet est partie de là.

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut
    Oui effectivement d'ou la demande.

    QQn connait il un projet open source pas trop lourd et bien codé en objet php pour voir ce qu'il font?

  15. #15
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Pas tres lourd ca dépend ce que t'entends par là
    Mais artichow me semble un exemple cohérent! Il y a un certain nombre de classes, de l'héritage, etc.

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut
    Mouais je pensais plus a un ptit truc basic pas a une librairie.
    Plus un module a rajouter a un site.....

  17. #17
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 53
    Points : 61
    Points
    61
    Par défaut
    Ben moi par exemple, pour me mettre dans le bain de la POO, j'ai programmé l'année dernière une classe pour gérer pratiquement toutes mes pages web.
    Actuellement tout ce que je fais qd j'ai un nouveau site à développer, c'est juste changer le design. Ce qui fait que je gagne énormément de tps.

    Je pense actuellement à mieux structurer la classe parce qu'il faut le reconnaître, lorsqu'on est débutant on a tendance à faire des classes fourre tout mais l'essentiel pour moi était d'oser franchir le gab. C'est fait et je le regrette pas du tout...

  18. #18
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 63
    Points : 201
    Points
    201
    Par défaut
    Citation Envoyé par Sowa
    Je pense actuellement à mieux structurer la classe parce qu'il faut le reconnaître, lorsqu'on est débutant on a tendance à faire des classes fourre tout
    Pour ne pas en arriver là une démarche UML peut s'avérer intéressante, voir indispensable selon la nature du projet. Certes, quand on débute cela peut paraître abstrait et difficilement abordable mais les efforts qu'on consent sont par la suite largement récompensés par un gain de qualité et de productivité.

    L'objet exige grande rigueur dans l'étape de modélisation et ce n'est pas plus mal. Une application web "objet" nécessite d'étre intégralement conçue avant d'être écrite, c'est encore plus vrai que dans le cas d'un langage procédural.

    Pour en revenir plus spécifiquement au php5, c'est un langage que j'aborde seulement et je me pose justement de nombreuses questions sur son caractère objet. Quelques-unes en vrac :
    - Peut-on parfaitement dissocier le php (logique) du html (vue) ?
    - Peut-on créer simplement des contrôles personnalisés réutilisables à souhait, un système de menu par exemple ?
    - Quels outils utilser pour faire du php "objet" ?
    - Y a t'il des bibliothèques de classes disponibles et prêtes à l'emploi qui évitent d'avoir à réinventer la roue ?

  19. #19
    Futur Membre du Club
    Inscrit en
    Mai 2003
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Kalishah
    Pour ne pas en arriver là une démarche UML peut s'avérer intéressante, voir indispensable selon la nature du projet. Certes, quand on débute cela peut paraître abstrait et difficilement abordable mais les efforts qu'on consent sont par la suite largement récompensés par un gain de qualité et de productivité.

    L'objet exige grande rigueur dans l'étape de modélisation et ce n'est pas plus mal. Une application web "objet" nécessite d'étre intégralement conçue avant d'être écrite, c'est encore plus vrai que dans le cas d'un langage procédural.

    Pour en revenir plus spécifiquement au php5, c'est un langage que j'aborde seulement et je me pose justement de nombreuses questions sur son caractère objet. Quelques-unes en vrac :
    - Peut-on parfaitement dissocier le php (logique) du html (vue) ?
    - Peut-on créer simplement des contrôles personnalisés réutilisables à souhait, un système de menu par exemple ?
    - Quels outils utilser pour faire du php "objet" ?
    - Y a t'il des bibliothèques de classes disponibles et prêtes à l'emploi qui évitent d'avoir à réinventer la roue ?
    Un papier et un crayon ça marche aussi vachement bien quand on débute, je suis passé par là et j'ai toujours pas lacher mon brouillon et mon crayon gris... Je suerais tenter de modérais un peu le "intégralement conçue", car il suffit à mon sens de savoir ou l'on va et d'avoir une bonne idée de ce que l'on souhaite obtenir.

    Pour moi une application qui est intégralement conçue avant la réalisation technique se ferme aux modifications auxquels l'on pense inévitablement pendant le dévellopement ou que l'on pourrait te suggèrer (cf : méthodes agiles de dévellopement).

    En ce qui concerne tes questions, dans l'ordre je dirais :

    - il le FAUT, donc c'est oui.
    - je pense que oui, même si je n'ai jamais essayé.
    - un éditeur de code, du papier, un crayon et le fichier de référence :p c'est ce que j'utilise (et une tasse de café aussi !)
    - je pense que pear correspond à ce que tu recherche : http://pear.php.net/

  20. #20
    Membre habitué
    Inscrit en
    Juillet 2003
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 196
    Points : 165
    Points
    165
    Par défaut Poo po po
    Citation Envoyé par zulot
    Mouais je pensais plus a un ptit truc basic pas a une librairie.
    Plus un module a rajouter a un site.....

    Slt,

    http://www.developpez.net/forums/sho...4&postcount=40

Discussions similaires

  1. [PHP 5.0] La programmation orientée objet en PHP
    Par RideKick dans le forum Langage
    Réponses: 12
    Dernier message: 28/06/2011, 18h01
  2. [MySQL] Programmation orienté objet en php 5
    Par dhbmedanis dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/05/2011, 11h06
  3. Programmation orientée objet en PHP
    Par dekalima dans le forum Langage
    Réponses: 2
    Dernier message: 28/03/2011, 13h45
  4. Réponses: 26
    Dernier message: 12/10/2010, 07h28

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