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] pb perte d'instance


Sujet :

Langage PHP

  1. #1
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut [POO] pb perte d'instance
    SAlut a tou(te)s!
    voila mon problème:
    j'utilise un objet User dont le constructeur définit un attribut _db qui est lui même une instance de la classe PDO.
    code dans User.class.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function __construct($db) 
    {
    	$this->_db = $db;
    }
    code dans ma page php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $user = new User($db);
    $user->setUserData($id_user);
    mais après clic sur un lien href je perd mon objet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // test si l'utilisateur a le droit d'acces au lien
    f ($user->droitAccesPartie($pages[$i]["ks_ecran"]))
    {
    	$template->assign_block_vars("un_lien", array(	"ID" => $pages[$i]["ks_ecran"],"TITRE" => $pages[$i]["trad_nom_ecran"],"PAGE" => $pages[$i]["page_web"]));
    }
    Et là c'est le drame pas d'accès à $user->droitAccesPartie(..) et pas de message d'erreur.
    J'ai bien essayé de linéarisé $user mais c'est apparemment impossible de le faire avec un objet PDO?
    Comment feriez vous?

    1ère solution possible:
    comme il n'y a qu'une page php dans mon application (inclusions, ...),
    je serialize $user à la fin de la page,
    je l'enregistre dans une var de session,
    et quant je recharge ma page je test cette var de session,
    si elle est definit alors je déserialize $user.
    Pour pouvoir faire ça je dois passer $db en global et le retirer du constructeur de ma classe. ça marche.

    Mais avant que je mette [résolu] sur mon post, je voulais essayer une méthode plus propre. Il parait qu'utiliser les global c'est pas bien.
    Auriez vous des idées?

  2. #2
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    Inutile, à mon avis, de sérialiser $user.

    Pourquoi ne pas faire plutôt ceci à chaque page (donc uniquement index.php) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $user = new User($db);
    $user->setUserData($id_user);
    Ce que tu peux enregistrer dans une variable de session, c'est $id_user

  3. #3
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    oki je vois ce que tu veux dire.

    Pour l'instant, je met cette remarque dans les bonnes idées à suivre.Merci.

  4. #4
    Rédacteur

    Avatar de Yoteco
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    1 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 099
    Points : 2 498
    Points
    2 498
    Par défaut
    Je ne comprend pas pourquoi tu dois mettre $db en global. Si tu sérialise ton instance hé bien tu n'as pas besoin de lui repasser la variable $db.

  5. #5
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    @Yoteco: tu dis
    Si tu sérialise ton instance hé bien tu n'as pas besoin de lui repasser la variable $db
    c'était cela mon problème, pour une raison qui m'est encore inconnu, il est impossible de sérialiser une instance de la classe PDO (celle que j'utilise pour faire abstraction de la base).
    Mais ce sont mes débuts j'ai put mal m'y prendre. Si tu vois un moyen de faire passer comme argument au constructeur $db, j'écoute. Merci

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

Discussions similaires

  1. [XL-2007] Perte des instances de classe
    Par JLP64 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 05/10/2011, 10h07
  2. [POO] Passage d'une instance de classe à un thread
    Par jesus144 dans le forum Langage
    Réponses: 3
    Dernier message: 01/08/2008, 12h19
  3. Réponses: 4
    Dernier message: 04/05/2008, 18h32
  4. Réponses: 4
    Dernier message: 27/07/2007, 20h34
  5. Réponses: 2
    Dernier message: 09/10/2005, 15h35

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