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 :

structure d'une classe qui communique avec une autre [POO]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut structure d'une classe qui communique avec une autre
    Bonjour,

    j'ai une classe (C1) dont une méthode doit lancer une méthode d'une autre classe (C2). Pour ce faire la classe C1 instancie l'autre classe (C2) pour en créer un référent puis appelle sa méthode :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ref_model_CVSImport = new CSVImport();
    $ref_model_CVSImport->uploadFile($this->filepath);
    Par contre, j'ai lu, donc me demande si ça serait mieux que si une classe C1 communique avec une autre (C2), il vaudrait mieux que le référent vers C2 soit un attribut de C1. Quel est votre avis ?

  2. #2
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    submergé par les réponses , j'ai finalement décidé de mettre tous les référents de classe en attributs car quand on relit le code, c'est beaucoup plus clair : on voit des attributs private $ref_xxx, donc on sait tout de suite avec quelles classes la classe présente communique.

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 241
    Points
    20 241
    Par défaut
    C'est important d'éviter de lier tes classes entre elle trop fortement.

    Quand C1 fait un new C2 dans une de ses méthode tu créer un couplage fort entre ces 2 classes. (sous entendu que C1 ne peut plus exister sans C2)
    Au contraire quand tu injecte C2 dans C1 (via le constructeur par exemple) ta classe C1 n'as pas besoin de connaitre les problématiques d'instanciation de C2 et ne sera pas impactée en cas de changement.

    Donc :
    Pas bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class C1 {
    	public function foo() {
    		$c2 = new C2();
    		$c2->bar();
    	}
    }
    Mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class C1 {
        private C2 $c2;
     
    	public __construct(C2 $c2) {
    	    $this->c2 = $c2;
    	}
     
    	public function foo() {
    		$this->c2->bar();
    	}
    }

  4. #4
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    Ouh là, là, tu me fais prendre conscience d'une grosse erreur de conception

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    Je suis embêté pour implémenter ta solution : en effet dans ta solution "mieux" tu passes en argument du constructeur de C1 un référent vers C2. Autrement dit, il faut avoir créé C2 avant C1 pour que ce référent existe. Donc même si le new C2(); n'est pas dans C1, il faut le mettre quelque part. Mais où ?

  6. #6
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 791
    Points : 3 058
    Points
    3 058
    Par défaut
    Un truc du genre...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $c1 = new C1(new C2());$c1->run();
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $c2 = new C2();
     
    $c1 = new C1($c2);
    $c1->run();

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Applications Java qui communiquent avec une servlet
    Par 11mad11 dans le forum Général Java
    Réponses: 7
    Dernier message: 09/01/2015, 01h11
  2. Réponses: 3
    Dernier message: 12/06/2014, 18h31
  3. Réponses: 6
    Dernier message: 21/06/2012, 17h49
  4. [PHP-JS] Applet qui communique avec PHP
    Par darkbob dans le forum Langage
    Réponses: 1
    Dernier message: 18/12/2006, 07h16
  5. Réponses: 2
    Dernier message: 17/03/2006, 09h26

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