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] Stockage de référence objet en session


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 18
    Points : 19
    Points
    19
    Par défaut [POO] Stockage de référence objet en session
    Bonjour à tous,
    J'ai un probleme tres bizare! en fait je souhaite stocker une référence objet en variable de session:

    récupération de la variable de session:
    $questionPrecedante =& $_SESSION['pool']->getQuestion($from);

    modification de cette variable ($questionPrecedante étant une adresse mémoire et non une copie, on modifie bien la variable de session directement):
    $questionPrecedante->reponsesQCM[0]=$_POST['c1'];
    $questionPrecedante->reponsesQCM[1]=$_POST['c2'];
    $questionPrecedante->reponsesQCM[2]=$_POST['c3'];

    Cela fonctionne parfaitement sur mon serveur local (testé avec easyphp et wamp - je n'ai pas les versions en tete mais je peux vous les fournir) mais pas sur free ou OVH! en effet, sur ces serveurs, la valeur n'est pas concervée de page en page (mais aucune erreur ne s'affiche)

    Par ailleurs j'ai testé en copiant une variable de session toute simple et cela fonctionne.
    Avez vous une idée du probleme? serait-ce la copie par référence qui pose probleme? le fait d'utiliser des objets ? un bridage au niveau des serveurs ?

    En vous remerciant beaucoup, je bloque depuis 3 jours sur ce probleme :p

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Est-ce que tu as fait un tour vers serialize() et unserialize() ?
    Ainsi que vers les méthodes magiques __sleep() et __wakeup() ?

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 18
    Points : 19
    Points
    19
    Par défaut
    arf, j'ai eu un faux espoir. effectivement le fait de sérialiser la variable de session aurait pu fonctionner d'un point de vu logique.
    J'ai ajouté avant mon traitement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['pool'] = unserialize($_SESSION['pool']);
    et apres mon traitement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['pool'] = serialize($_SESSION['pool']);//on seraialise le pool en session pour le sauvegarder
    Mais ça fait exactement la meme chose.
    Ma variable de session a bien la valeur initiale que je lui ai donnée (et est concervée de page en page), mais les modifications appliquées a cette variable sont perdues

    J'ai l'impression que c'est la copie de référence qui pose probleme, je vais poursuivre mes recherches la dessus.

  4. #4
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 18
    Points : 19
    Points
    19
    Par défaut
    Bon en fait j'ai trouvé comment contourner le probleme.
    J'ai l'impression qu'il y a un bug dans php au niveau de la gestion des objets.
    Je m'explique:

    supposons que j'ai un objet "Zoo" qui contient un ensemble d'objets "Animal".
    et qu'un Animal possede une variable d'instance "age"
    Si je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    monZoo = new Zoo();
    monAnimal =& monZoo->getAnimal(2);
    monAnimal.age=10;
    Cela ne modifiera pas notre objet Animal initial qui est dans Zoo mais une copie!

    A la place il faut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    monZoo = new Zoo();
    monAnimal =& monZoo->animal[3]; //en supposant que le parametre 2 de la          méthode getAnimal retourne en fait l'animal qui est en position 3.
    monAnimal.age=10;
    par conséquent vous devez écrire une méthode getIndexAnimalFromID qui se charge de faire la conversion.
    On aura donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    monZoo = new Zoo();
    monAnimal =& monZoo->animal[Animal->getIndexAnimalFromID(2) ]; 
    monAnimal.age=10;
    Je sais pas si c'est tres clair comme explication lol.
    Mais pour résumer, il ne faut pas utiliser de méthode pour récupérer une référence d'objet... étant habitué au monde Java, j'avoue que la gestion des objet laisse quelque peu a désirer en PHP (J'attend quand meme de tester PHP5 qui est cencé avoir grandement amélioré les choses )

  5. #5
    Membre expérimenté
    Avatar de guitou12
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 077
    Points : 1 561
    Points
    1 561
    Par défaut
    En effet pour l'objet tu devrais grandement et urgemment passer en version 5 car la gestion est beaucoup plus facile.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $monZoo = new Zoo();
    $monAnimal = monZoo->getAnimal(2);
    $monAnimal->age=10;
    Roulez jeunesseeeeeeeeee

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

Discussions similaires

  1. Stockage partiel d'objets en session ou application
    Par Arthis dans le forum ASP.NET
    Réponses: 4
    Dernier message: 07/05/2009, 13h23
  2. [POO] Stockage en variable de session d'un objet
    Par delete dans le forum Langage
    Réponses: 6
    Dernier message: 29/03/2009, 18h49
  3. [POO] Solution d'objet en session partagé. Bon ou pas bon ?
    Par berceker united dans le forum Langage
    Réponses: 20
    Dernier message: 10/07/2008, 10h49
  4. [POO] PHP5 objet et session
    Par deborah95 dans le forum Langage
    Réponses: 4
    Dernier message: 17/04/2007, 21h58
  5. [POO] PHP 5, transmettre objet dans la session
    Par FCDB dans le forum Langage
    Réponses: 2
    Dernier message: 23/05/2006, 15h26

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