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

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  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 : 44
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    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 chevronn� 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
    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 : 44
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    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 : 38
    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
    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.
    Blog - Mon espace developpez -
    Oracle Certified Professional, Java SE 6 Programmer
    eZ Publish Certified developer

  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 : 44
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    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