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 :

Passer en session un objet en surchargeant la méthode __sleep et __wakeup


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut Passer en session un objet en surchargeant la méthode __sleep et __wakeup
    Bonjour.
    Etant donné un objet instancié par la classe ci-dessous, j'aimerais pouvoir écrire dans le code d'appel un truc aussi simple que

    sur une page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['c'] = new ContenuManager('TOTO');
    et sur une autre page qu'il reconnaisse une propriété de l'objet $_SESSION['c']->groupes par exemple... sans se reconnecter à la base (car plus besoin à priori).
    Merci d'avance de vos lumières...

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    class ContenuManager{
    	public $groupes=array();
    	public $groupe='';
    	public $rubriques=array();
    	public $requetes=array();
    	public $excels=array();
     
    	public function __construct($gpe){
    		try{
    			$connex= new PDO(blablabla);
    			$connex->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
    			$this->setGroupes($connex);
    			$this->setGroupe($gpe);
    			$connex=NULL;
    		}
    		catch(Exception $e){
    			echo '<p>Connexion impossible: '.$e->getMessage().'</p>';
    			echo '<p>N° : '.$e->getCode().'</p>';
    			die();
    		}
    	}
    	public function setGroupes($connex){
    		$sql='select gpe
    		from gpe 
    		order by gpe;';
    		$stmt=$connex->prepare($sql);
    		$stmt->execute();
    		$i=0;
    		while ($gpe=$stmt->fetch(PDO::FETCH_ASSOC)){
    			$this->groupes[$i]=$gpe['gpe'];
    			$i++;				
    		}
    		$stmt->closeCursor();
    	}
    	public function getGroupes(){
    		return $this->groupes;
    	}
    	public function setGroupe($gpe){
    		if (!(in_array($gpe,$this->groupes))){
    			trigger_error("Ce groupe n'est pas dans notre base.", E_USER_ERROR);
    		}
    		$this->groupe=$gpe;
    	}
    	public function getGroupe(){
    		return $this->groupe;
    	}
     
    	public function __sleep(){
    		return array ('groupes','groupe','rubriques', 'requetes', 'excels');
    	}
    	public function __wakeup(){
              //je mets quoi ici exactement, si je veux juste recréer proprement mon objet sans me reconnecter à la base et tout le tintouin ?
    	}
    }
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  2. #2
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    usage normal des sessions & des classes.

    la réponse est: tu ne mets rien. ni dans __sleep(), ni dans __wakeup(), tu ne les surcharge même pas.

    l’intérêt des méthodes et de ne pas sauvegarder des attributs "volatiles" typiquement une connexion à la bd mais comme ta connexion à la base de données passe par un paramètre et non un attribut de la classe ya rien à faire (ou une chaine de 3Mo dont tu n'as rien a faire à la session d'après). De mémoire on ne repasse pas dans le constructeur ici (puisque l'objet est déjà créé , il a juste changé de représentation).

    la seule chose a faire s'est de s'assurer que le(s) fichier(s) de définition de la classe sera disponible au réveil de la session pour que celui-ci soit chargé (sinon erreur !!!) (les parce que si une classe ne se met que sur un seul fichier, pour un peut qu'il y ai de l'héritage.... )

  3. #3
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    C'est vrai que j'ai omis de signaler mon problème.
    Quand je ne fais rien (bref ce que tu préconises), il se passe ça (objet incomplet quand sur une autre page je fais un var_export sur la variable de session)
    Le serveur est en PHP 5.1, ça peut jouer ?

    __PHP_Incomplete_Class::__set_state(array(
    '__PHP_Incomplete_Class_Name' => 'ContenuManager',
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

Discussions similaires

  1. [POO] php5 : passer une classe en objet session
    Par dridri dans le forum Langage
    Réponses: 1
    Dernier message: 18/02/2008, 16h19
  2. [C#] Tri d'objet et surcharge d'opérateur
    Par Royd938 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 17/12/2007, 00h26
  3. Réponses: 1
    Dernier message: 10/02/2007, 20h30
  4. [Sessions] Session + Serialize + Objets?
    Par Chiwawa dans le forum Langage
    Réponses: 2
    Dernier message: 28/09/2005, 20h32
  5. [JACOB] Comment passer un objet par référence à une méthode
    Par zlavock dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 21/03/2005, 18h28

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