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 :

Objet dans objet sans le copier


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Objet dans objet sans le copier
    Bonjour,

    Ma question est simple, j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class Objet1 {
    public $var1;
    public $var2;
    }
     
    class Objet2 {
    public $var1;
    public $var2;
    }
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?
    $_SESSION['objet1'] = new Objet1();
    $_SESSION['objet2'] = new Objet2();
    ?>
    Je voudrais que la variable $var2 de Objet1 pointe vers Objet2, soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?
    $_SESSION['objet1']->var2 = $_SESSION['objet2'];
    ?>
    MAIS je ne veux pas qu'il le copie dedans, car sinon en session j'ai 2 fois Objet2 de stocké, dans $_SESSION['objet1'] et dans $_SESSION['objet1']->var2.

    Je ne sais pas si cela est possible, merci de m'éclairer sur ce sujet.

  2. #2
    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 : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Mettre les objets directement en session est inutile puisqu'il faudra les sérialiser.
    De plus, et c'est un avis personnel, c'est un peu se compliqué la vie que de manipuler des variables de session à ce point. Passer par des variables intermédiaires à un coût négligeable sur les perfs et formidable sur la lisibilité du code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $myObj1 = new Objet1();
    $myObj2 = new Objet2();
     
    // les objets sont passés par référence, donc pour l'instant ça le fait
    $myObj1->var1 = $myObj2;
     
    // je continue à bidouiller mon code ici
     
    $_SESSION['o1'] = serialize($myObj1);
    $_SESSION['o2'] = serialize($myObj2);
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Merci pour votre réponse.

    En faite, je vous ai simplifier le problème en mettant le minimum.

    Le cas est que j'ai besoin d'avoir ses 2 objets en session et que cela n'est pas une option (je veux entendre par là que c'est le système en place et que je ne peux le changer).

  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 : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Bonjour,

    Avec le code fourni plus haut, les deux objets sont bien en session, mais je préfère les manipuler par des variables intermédiaires dans le script.

    Le principe général :

    Premier passage :
    • Je créée mes objets
    • Je les manipule
    • Je les stocke en session


    Autres passages :
    • Je récupère mes objets à partir des variables de session
    • Je les manipule
    • Je les stocke en session avec leur nouvel état
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    En faite ma problématique est que l'objet2 ne se sert pas forcément de l'objet1 de la session, il peut également utiliser un autre objet de type objet1 passé en paramètre.

    Mais dans le cas où il utiliserais celui de la session, je ne veux pas qu'il stocke l'objet1 dans var2, mais plutôt qu'il y face référence (dans le cas où il est passé en paramètre il est stocker cela est normale, en plus de celui qui existe en session car ils sont différents).

    Je n'arrive pas à expliquer mon problème, je ne sais pas si je suis très clair.

  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 : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Au final, es-tu bien sûr que tu ais besoin de l'avoir en référence ?
    Ne serait-il pas aussi simple de le passer en paramètre des méthodes qui doivent l'utiliser ?
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    J'ai besoin des 2 cas.

    Je prend un exemple, objet1 devient ma voiture et objet2 le garagiste.

    La plus grande utilisation de garagiste se fait en servant de la voiture en session (garagiste->voiture_a_reparer = $_SESSION['voiture_user_login']).

    Mais je veux pouvoir sur d'autres pages utiliser le garagiste avec une voiture autre que celle du user connecté.

    Et J'ai besoin (nécessité pour le fonctionnement du site) de mettre garagiste en session également.

    Donc pour alléger le poids des sessions, je veux stocker la voiture dans garagiste->voiture_a_reparer, quand celle-ci est différente de celle du user en cours, ou faire référence à la voiture en session dans l'autre cas.

  8. #8
    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 : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par 23-UNIT Voir le message
    La plus grande utilisation de garagiste se fait en servant de la voiture en session
    Donc tu as bien besoin des deux objets Garagiste et Voiture en session, non ?
    Citation Envoyé par 23-UNIT Voir le message
    Mais je veux pouvoir sur d'autres pages utiliser le garagiste avec une voiture autre que celle du user connecté.
    J'imagine que cette autre voiture est construite dans le script.

    Donc pourquoi ne pas faire un truc de ce genre :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class Garagiste {
        reparerVoiture(Voiture $myVoiture) {
            // ici je bidouille l'objet qui est de toute façon passé par référence
        }
    }
    Avec des appels du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if ($besoinVoitureUtilisateur)
        $objGarargiste->reparerVoiture($objVoitureUtilisateur);
    else
        $objGarargiste->reparerVoiture($objVoitureAutre);
    Autre façon de faire :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class Garagiste {
        public $Voiture;
        reparerVoiture() {
            // ici je bidouille l'objet $this->Voiture qui est de toute façon passé par référence
        }
    }
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if ($besoinVoitureUtilisateur) {
        $objGarargiste->Voiture = $objVoitureUtilisateur);
        $objGarargiste->reparerVoiture();
    }
    else {
        $objGarargiste->Voiture = $objVoitureAutre;
        $objGarargiste->reparerVoiture();
    }

    Mais quoi qu'il en soit, à la fin du script, je rebalance tout en session :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $_SESSION['garagiste'] = serialize($objGaragiste);
    $_SESSION['voiture'] = serialize($objVoiture);
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Je vais analyser tout cela et voir comment je peux utiliser votre méthode.

    Car le système qui est en place est dur à modifier (c'est un gros site donc changer de façon de faire doit être bien préparé).

    En tout cas je vous remercie d'avoir consacré du temps à mon problème.

Discussions similaires

  1. Un objet dans objet, mais comment l'atteindre ?
    Par JamesTridas dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 26/05/2015, 10h37
  2. Lire int dans objets dans ArrayList.
    Par astran dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 03/04/2013, 21h22
  3. Objet dans Objet instancié via BDD
    Par Kurapika-shinji dans le forum C#
    Réponses: 7
    Dernier message: 10/08/2011, 16h44
  4. Ajout d'objets dans objets insérables
    Par NicolaTesla dans le forum Cognos
    Réponses: 1
    Dernier message: 05/05/2009, 17h49
  5. Property grid objet dans objet
    Par Thesum dans le forum VB.NET
    Réponses: 2
    Dernier message: 18/03/2009, 09h13

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