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] Utilité... ?


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut [POO] Utilité... ?
    Hello tout le monde...

    Je me suis un peu remis au PHP ces temps et je n’ai pas vraiment trouvé la façon de bien organiser mon code... dans ce domaine je trouve que le PHP est un peu rustre...

    J'aurais voulu savoir l'avantage dans un cas concret de la POO en PHP pcq là j'ai un peu du mal dans trouver..


    Est ce que par exemple je peux faire ceci :
    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
     
    class index {
     
        var $titre;
        var $corps;
        var $piedPage;
     
        function setTitre($var) {
            $this->titre= $var;
        }
        function setCorps($var) {
            $this->corps= $var;
        }
        function setPiedPage($var) {
            $this->piedPage= $var;
        }
     
        function affiche() {
     
            // Affichage de la mise en page... ($titre, $corps, $piedPage)
        }
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class Page1 extends index {
     
        function Page1 () {
            setTitre("Blabla HTML");
            setCorps("Blabla HTML");
            setPiedPage("Blabla HTML");
            affiche();
        }
    }

    Si j'essai d'expliquer ce que j'ai essayé de faire:

    J'ai fais un objet principale sur le quelle j'ai des méthodes qui me permettent de redéfinir certaine partie de ma page...

    La classe Page1 hérite de la classe index et j'envoie d'autre donnée à affiché avec les méthodes que j'ai défini dans la classe index...


    est ce que c'est possible de faire ceci ???

    Le code comporte surement des erreurs... je l'ai uniquement mis pour expliquer le principe...

    Merci d'avance

  2. #2
    Membre averti Avatar de supernova
    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 447
    Points : 415
    Points
    415
    Par défaut
    Moi je code ma classe dans un fichier à part et ensuite je fait un include de la ressource. Mais je suis en PHP v4

  3. #3
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 494
    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 494
    Points : 6 065
    Points
    6 065
    Par défaut
    Non juste à cause du nom de ta classe. Si je regarde tes attribut j'aurais appelé la classe Page et non index parce que index est trop ciblé. Par contre tu peux faire ceci

    $Index = new Page();
    $Page2 = new Page();

    Dans ce cas ta classe Page seront utilisé pour deux page différente.

  4. #4
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut
    oui ok je suis d'accord pour les noms des classes mais c'étais juste un exemple... mais ce principe est envisageable ?

    Ou comment est ce que vous utilisé la POO en PHP ?

  5. #5
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 494
    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 494
    Points : 6 065
    Points
    6 065
    Par défaut
    C'est une question vague. Quand tu identifies tes éléments présent dans ton application. Dans mon application j'ai des groupe.
    controleur //Est le chef d'orchestre de tous se beau monde.
    abstract // interface entre la ou les bases de données
    midlewear // toute les classes métier. Elle ne savent rien faire d'autre que communiquer entre elle. Il y a aucune requete SQL ni d'affichate
    affichage //Gère l'affichage des informations.

    Dans d'autre language objet ceci aurait été appelé package ou namespace/assembly. C'est du developpement au tiers.
    1 pour l'affichage, midllewear, base de données.
    Chaque élement possede un ensemble de classe.

    bon là je donnée juste un point de vue organisation mais si tu commences à reflechir dans ce sens là tu seras en bonne partie dans le bon chemin.

    Pour mon cas, mon application est à 95% objet.
    Avantage à developper en objet.
    - Tu gagnes énormement de temps en maintenance. Si tu as une modification tous le monde en bénéficie. Exemple, tu ajoutes un champs dans une table t'auras pas à courir dans chaque fichier ou il y a la requête pour faire reporter la requête. Si tu as bien organisé ton bordel ça sera au pire 2-3 fichiers quelque soit la taille de l'application.

    - En souplesse, je dev sur 3 type de SGBD : Mysql 4.1 , 5.x et SQLServer et d'avance je ne sais pas sur quel base l'utilisateur va travailler en sachant qui peut traver potentiellement sur les 3 en même temps, ben vive l'objet

    - Tu y perd en temps de mise en oeuvre parce que ça peut être long à mettre en place au début mais après que t'es tous créé tu développes à une vitesse à faire fumer le clavier

    c'est d'la bombe lorsque developpe en objet cousin. Le plus important c'est savoir définir ses objets et savoir ou les placer.

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Turquie

    Informations forums :
    Inscription : Avril 2005
    Messages : 614
    Points : 502
    Points
    502
    Par défaut
    Salut Soad,

    Ce que tu as fait est presque bon sauf pour cette partie ou manque juste:
    class Page1 extends index {

    function Page1 () {
    setTitre("Blabla HTML");
    setCorps("Blabla HTML");
    setPiedPage("Blabla HTML");
    affiche();
    }
    }
    çà serai plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Page1 extends index {
     
        function Page1 () {
            $this->setTitre("Blabla HTML");
            $this->setCorps("Blabla HTML");
            $this->setPiedPage("Blabla HTML");
            $this->affiche();
        }
    }
    et çà devrai être bon
    Apres si tu veut construire de très grosse application regarde le modele MVC et le Zend Framework, enfin je doit dire que c'est pas évident de s'y mettre seul dans tout çà

  7. #7
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut
    mouais je vois...


    Juste encore une question :

    Est ce que je peux définir le type de variable qu'une méthode peut accepter ?

    Si j'ai l'interface suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    interface Affichable {
     
        public function affiche();
    }

    dans cette méthode j'aimerais uniquement accepter de passé en paramètre les objets qui implements Affichable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        public function methode1($myobject) {
     
            $myobject->affiche();
        }
    }

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Turquie

    Informations forums :
    Inscription : Avril 2005
    Messages : 614
    Points : 502
    Points
    502
    Par défaut
    euhh perso je ne suis pas un pro de la POO PHP mais je m'y met de plus en plus.

    et là je ne suis pas certains, mais il me semble que tu ne peux pas accepter des parametre que d'un seul type.

    par contre dans ta méthode du peut très bien faire une vérification de ton parametre transmis et voir s'il implements bien Affichable.

    un truc dans le genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if(!$myobject->affiche()){
     // tu traite l'erreur
    }
    enfin tout ce que je dit est à confirmé par un pro

  9. #9
    Membre confirmé Avatar de stunti
    Inscrit en
    Mai 2006
    Messages
    520
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mai 2006
    Messages : 520
    Points : 594
    Points
    594
    Par défaut
    C'est possible ne PHP5 :
    http://fr.php.net/manual/en/language...ypehinting.php
    Mais uniquement avec des objets ou des array.

  10. #10
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Turquie

    Informations forums :
    Inscription : Avril 2005
    Messages : 614
    Points : 502
    Points
    502
    Par défaut
    Merci stunti j'y savais pas, c'est tout nouveau en faite enfin depuis la 5.1

  11. #11
    Membre confirmé Avatar de stunti
    Inscrit en
    Mai 2006
    Messages
    520
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mai 2006
    Messages : 520
    Points : 594
    Points
    594
    Par défaut
    Les objets depuis la 5.0 et les arrays depuis la 5.1

  12. #12
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut
    oki...

    Merci à tous pour vos réponse

  13. #13
    Membre éprouvé Avatar de trattos
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 000
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 000
    Points : 1 080
    Points
    1 080
    Par défaut
    Concrètement ça sert à simplifié tes applications. ça évite d'avoir des morceaux de codes redondant, en faisant une classe tu simplifis le tout et tes applications deviennent plus faciles à mettre à jour, faire évoluer, ...

  14. #14
    Membre chevronné
    Avatar de eric.pommereau
    Homme Profil pro
    Ingénieur, pôle cartographie
    Inscrit en
    Décembre 2004
    Messages
    715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur, pôle cartographie
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2004
    Messages : 715
    Points : 1 790
    Points
    1 790
    Par défaut
    Pour ma part je dirais également que le choix de la POO dans le cadre d'un projet moyen à important rend le travail collaboratif plus aisé, les classes sont plus ou moins auto-descriptives, la reprise de code est bien plus aisée que dans des fonctions où c'est bien vite le bazard.

    Quelques trucs chiants en POO PHP5: pas de typage des variables simples (c'est super chiant par exemple dans les paramètres d'une fonction), la surcharge de méthode est possible mais galère à mettre en oeuvre (cf: __call) comparée à d'autres langages (java, delphi ou .NET).

    Disons également que la communauté "classique" de php n'est peut-être pas encore habituée ou prête à la mise en en oeuvre de la POO.

    Cela dit ... une fois qu'on y a touché dificile de s'en passer ... il faut juste en avoir eu l'utilité une fois pour en entrevoir les intérêts ...

    Voilà ... sujet intéressant en tout cas !!

    @++

    Eric POMMEREAU

  15. #15
    Membre averti

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 640
    Points : 408
    Points
    408
    Par défaut
    Citation Envoyé par soad
    oui ok je suis d'accord pour les noms des classes mais c'étais juste un exemple... mais ce principe est envisageable ?

    Ou comment est ce que vous utilisé la POO en PHP ?
    J'utilise la POO en PHP pour gérer l'accès aux données, les formulaires et les listes. J'utilise par exemple une classe Formulaire, qui gère l'affichage du formulaire, la récupération et le traitement des données postées, ainsi que des classes pour chaque type de champs (TextField, CheckBoxField, DateField...). Par héritage, j'obtiens différents types de formulaires, avec des traitements spécifiques (insertion de données, envoi d'e-mail, login...).

    Cela me fait gagner beaucoup de temps, m'épargne un travail fastidieux et répétitif et me permet d'éviter de nombreuses erreurs.

  16. #16
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 177
    Points : 196
    Points
    196
    Par défaut
    De mon coté je suis très scèptique quant à son utilité. Dans un language OO classique on a de véritable points clefs. Je parle ici de PHP 4 qui est le plus repandu et pas de PHP 5 :p.

    Ici il reste :
    - Heritage simple
    - Fonction virtuel (par défaut)

    Héritage simple :
    Ca peu servir si d'autre personne doit coder pour votre projet. Ca permet des réaliser entre autre des sorte d'interface.

    Fonction virtuel :
    Définir du code par défaut


    Mais a quoi ça sert si il n'y a pas de typage ? De toute facon on appelle nos methode comme bon nous semble ! Que ca soit 2 objet avec le même parent ou avec aucun parents, on ne défini pas le type de la variable qui risque de recevoir plusieurs types d'objet !

    De plus l'encapsulation en php4 est une bonne blague car pas de "private" et "protected". Vos variables membres reste accessible donc non protégé.

    Il reste quoi ? Juste une organisation et habitude ! Le code objets sera plus lisible pour les programmeur "modernes" par habitude à OO. Car la on doit dire en php4 la programmation OO se resume presque à des "namespace". Il reste juste en plus des facilitées pour la sérialisation avec les fonction magique.

    Sinon je vois toujours pas un cas ou la POO facon PHP4 fait vraiment gagner pas mal de temps! Si que quelqu'un en a qu'il le dise ^^.

  17. #17
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 494
    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 494
    Points : 6 065
    Points
    6 065
    Par défaut
    Citation Envoyé par Heptaeon
    De mon coté je suis très scèptique quant à son utilité. Dans un language OO classique on a de véritable points clefs. Je parle ici de PHP 4 qui est le plus repandu et pas de PHP 5 :p.

    Ici il reste :
    - Heritage simple
    - Fonction virtuel (par défaut)

    Héritage simple :
    Ca peu servir si d'autre personne doit coder pour votre projet. Ca permet des réaliser entre autre des sorte d'interface.

    Fonction virtuel :
    Définir du code par défaut


    Mais a quoi ça sert si il n'y a pas de typage ? De toute facon on appelle nos methode comme bon nous semble ! Que ca soit 2 objet avec le même parent ou avec aucun parents, on ne défini pas le type de la variable qui risque de recevoir plusieurs types d'objet !

    De plus l'encapsulation en php4 est une bonne blague car pas de "private" et "protected". Vos variables membres reste accessible donc non protégé.

    Il reste quoi ? Juste une organisation et habitude ! Le code objets sera plus lisible pour les programmeur "modernes" par habitude à OO. Car la on doit dire en php4 la programmation OO se resume presque à des "namespace". Il reste juste en plus des facilitées pour la sérialisation avec les fonction magique.

    Sinon je vois toujours pas un cas ou la POO facon PHP4 fait vraiment gagner pas mal de temps! Si que quelqu'un en a qu'il le dise ^^.
    Disont que dans le 4 je dirais que c'est plus de l'organisation d'information que la fiabilité de l'information.
    Perso, depuis que je suis passé au 5 j'aurais du mal a retourner au 4, je me demande comment j'ai fais avant

  18. #18
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 177
    Points : 196
    Points
    196
    Par défaut
    Le 4 est encore fort présent. D'ailleur l'ajout du typage pour le PHP 5 n'est pas la pour rien :p.

    http://be2.php.net/manual/fr/languag...ypehinting.php

Discussions similaires

  1. [POO] Utilité de 'final','interface' ?
    Par guillhomme_ dans le forum Langage
    Réponses: 4
    Dernier message: 17/10/2007, 17h05
  2. Réponses: 6
    Dernier message: 20/09/2007, 11h11
  3. [POO] Utilité d'un singleton en php5
    Par WalidNat dans le forum Langage
    Réponses: 1
    Dernier message: 26/05/2007, 15h08
  4. Réponses: 18
    Dernier message: 08/04/2006, 10h39
  5. [POO] [AVIS] L'utilité des classes
    Par Anduriel dans le forum Langage
    Réponses: 66
    Dernier message: 10/11/2005, 16h45

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