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 :

Sérialisation d'un tableau d'objets


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Par défaut Sérialisation d'un tableau d'objets
    Bonjour à tous,

    J'ai un problème avec la fonction unserialize.
    J'ai parcouru le net pour chercher des solutions mais n'arrive pas à trouver une réponse adéquat.

    Voila le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      class Test {
            private $test;
     
            function __construct($t){
                $this->test=$t;
            }
        }
     
     
        $test = array(new Test("case1"),new Test("case2"));
        $ser=serialize($test);
     
        $res =  unserialize($ser);
        echo $res[0];
    Et le message d'erreur :

    Catchable fatal error: Object of class Test could not be converted to string

    En gros j'aimerais pouvoir passer d'une page à l'autre une session contenant un tableau d'objet compliqué (plus que l'exemple).

    Si quelqu'un aurait déjà fait fasse à ce problème ...
    Merci

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 319
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 319
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par Yoan_ Voir le message
    Catchable fatal error: Object of class Test could not be converted to string
    Parceque tu fais echo $res[0] au lieu de echo $res[0]->test.
    Pour afficher un objet comme tu le faisait il aurait fallu implémenter la méthode __toString( )

    En gros j'aimerais pouvoir passer d'une page à l'autre une session contenant un tableau d'objet compliqué (plus que l'exemple).

    Si quelqu'un aurait déjà fait fasse à ce problème ...
    Pas de souci particulier avec serialize/unserialize, il faudra juste t'assurer que la class est bien définie dans le script cible.

  3. #3
    Membre averti
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Par défaut
    Oui effectivement Seb Merci,
    Cet exemple simple fonctionne donc bien.

    Je n'avais pas fait attention à ça.

    Pour un exemple plus compliqué j'obtient l'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unserialize() expects parameter 1 to be string, array given
    Je pensais passer par un exemple simple pour comprendre mon erreur, mais celui-ci fonctionne bien, je ne vois pas pourquoi j'obtiens cette erreur lorsque j'ai un tableau d'objet plus compliqué.

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 319
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 319
    Billets dans le blog
    17
    Par défaut
    Vu le message d'erreur tu dois filer à unserialize( ) un tableau d'objets sérialisés (passés en session ?), non ?

  5. #5
    Membre averti
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Par défaut
    Oui c'est ca.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    page1.php
     
    $_sess->sess_liste = serialize(article::chargementListe());	
    header('Location:index.php');
     
    J'utilise une classe perso pour les sessions, je met dans sess_liste mon tableau contenant la liste d'objet article. Et je passe sur la page index.php
     
    page index.php
     
    require_once("../system.php");
    $liste = unserialize($_sess->sess_liste);
     
    Le fichier system.php appelle la liste des classes utilisées et ensuites les sessions.
    Et j'obtient cette erreur

    EDIT j'ai oublié le serialize en recopiant la ligne n°1

  6. #6
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 319
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 319
    Billets dans le blog
    17
    Par défaut
    Donc, pour faire simple, tu fais d'après ce que j'ai compris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $objets = array( ) ;
    $objets[ ] = serialize(new Objet('foo')) ;
    $objets[ ] = serialize(new Objet('bar')) ;
    $_SESSION['objets'] = $objets ;
    Note qu'ici $_SESSION['objets'] est un tableau non linéarisé d'objets linéarisés.

    Et ensuite sur une autre page :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $objets = unserialize($_SESSION['objets']) ;
    Ici tu veux délinéariser le tableau d'objets. Or ce dernier ne l'est pas, ce sont les objets qui le composent qui sont linéarisés.

    Une solution serait de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $objets = array( ) ;
    $objets[ ] = new Objet('foo') ;
    $objets[ ] = new Objet('bar') ;
    $_SESSION['objets'] = serialize($objets) ; // Linéarisation du tableau d'objets

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

Discussions similaires

  1. retour tableau d'objets par service web axis jboss
    Par TrollMaster dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 27/11/2005, 21h45
  2. Tableau d'objets
    Par moulefrite dans le forum MFC
    Réponses: 7
    Dernier message: 15/06/2004, 14h14
  3. Sauvegarde / Chargement d'un tableau d'objets
    Par Naruto dans le forum Langage
    Réponses: 3
    Dernier message: 18/05/2004, 14h34
  4. [VB6]Tableau d'objet withevents
    Par soazig dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 13/02/2004, 19h44
  5. [VB6] [Syntaxe] Fonction renvoyant un tableau d'objets
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/10/2002, 15h33

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