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] Interragir entre les classes


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut [POO] Interragir entre les classes
    Bonjour,

    J'ai trois classes:

    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
    class Main {
         public $session;
         public $account;
     
         function __construct(){
             $this->account = new Account();
     
             $this->session = new Session();
             $this->session->start_session();
         }
    }
     
    class Session{
         public function start_session(){
             Main::account->user = 'visiteur';
         }
    }
     
    class Account{
         public $user;
    }
    ... et bien entendu, ca ne fonctionne pas

    Comment est-ce que je peux interragir entre deux objets sur des variables public ?

  2. #2
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Salut, ça veut dire quoi ça ne fonctionne pas ?

    Tu as des messages d'erreur ? Le résultat diffère de ce que tu attends ?...

    Merci d'être plus précis
    Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

    F.A.Q. : Java, PHP, (X)HTML / CSS

    N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème

  3. #3
    Membre éclairé
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Points : 858
    Points
    858
    Par défaut
    Je pense qu'il faut que tu revois les notions d'attributs static et public... ta class ne peut effectivement pas fonctionner comme ça... qui plus est tu te complique la vie... essaye plutot de faire une class parente et des class filles... .. .

    @ tchaOo°

  4. #4
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut
    Hum, mais le problème, c'est qu'une session n'à pas de compte associée tant que le visiteur n'est pas authentifié.

    Et la session sera donc démarré AVANT que le compte soit instancié.

    Je vois mal comment organiser cela avec une classe fille.


    Quand je dis que ca ne fonctionne pas, c'est simplement que je n'ai pas accès aux variables... Aucune erreur.

    De plus, comme je n'ai normalement qu'un seul objet session et un seul objet account d'instancié, j'étais en train de me demander si je ne devais pas tout simplement tout mettre en static, sauf que je trouve l'utilisation de la POO drôlement innutile dans un tel cas.

    Bref, j'ai juste besoin d'un petit coup de pouce pour être lancé du bon pieds car la ca dépasse un peu l'exemple du Zoo et des animaux mamifère que j'ai dans mon livre de PHP

  5. #5
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut
    Personne à une idée sur la bonne marche à suivre...

    (Vous allez pas me dire que vous programmez tous QUE des zoo j'espère.. )

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Main::account->user = 'visiteur';
    dans cette ligne tu appel une methode statique de la classe main et ensuite tu essaye d'acceder a un attribut user de l'objet renvoyer par la methode account qui n'existe pas

    pour ton probleme tu a juste a passer a la classe session l'utilisateur c'est tout
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        function __construct(){
             $this->session = new Session(new Account());
             $this->session->start_session();
         }
     
    class Session{
         public function __construct(Account $account){
             $account->user = 'visiteur';
         }

  7. #7
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut
    D'accord, mais considérant que je ne peux avoir qu'un seul 'objet' session d'instancié, est-ce que je devrais créer toute la classe session en static ?

    Supposons que je créer 100% de ma classe session en static, comment je dois faire pour pouvoir y accéder SANS PASSAGE DE PARAMÊTRE n'importe ou dans n'importe quel classe ou non. (Quelque chose de global)

  8. #8
    Membre éclairé
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Points : 858
    Points
    858
    Par défaut
    Il faut utiliser la technique du singleton... il y a plusieurs manières de faire un singleton... 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
    <?php
    class maClass
    {
    
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;function &getInstance()
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;{
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;static $_maClass_SingleInstance = null;
    
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(!is_object($_maClass_SingleInstance))
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$_maClass_SingleInstance =& new maClass();
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return $_maClass_SingleInstance;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;}
    }
    ?>
    ou encore...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    class maClass
    {
    
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;function &getInstance()
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;{
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(!isset($GLOBALS&#91;'_maClass_SingleInstance']) || !is_object($GLOBALS&#91;'_maClass_SingleInstance']))
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$GLOBALS&#91;'_maClass_SingleInstance'] =& new maClass();
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return $GLOBALS&#91;'_maClass_SingleInstance'];
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;}
    }
    ?>
    Après tu fais...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $maClass =& maClass::getInstance();
    
    ou que tu soit dans ton code tu aura accès à une instance unique de "maClass"... .. .

    @ tchaOo°

  9. #9
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut
    Hoooooo....

    Je ne sais pas si ca répondra à 100% à mes attentes, mais ca viend de me faire faire un bond en avant, ca c'est certain !

    Merci ! (Je met résolu pour le moment)

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

Discussions similaires

  1. [WD14] POO Communication entre les classes
    Par jimmypage dans le forum WinDev
    Réponses: 22
    Dernier message: 15/09/2011, 09h30
  2. [MySQL] POO - interaction entre les classes (tuto PHPUnit)
    Par hornetbzz dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 01/02/2010, 10h30
  3. Réponses: 3
    Dernier message: 22/11/2005, 11h12
  4. Comparaison entre les classes et les fonctions
    Par Ashgenesis dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 08/09/2005, 19h09
  5. [POO] projet ->soutirer les classes objets
    Par .:dev:. dans le forum C++
    Réponses: 10
    Dernier message: 14/06/2005, 23h05

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