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 :

Session objet et héritage


Sujet :

Langage PHP

  1. #1
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 19
    Par défaut Session objet et héritage
    Bonjour

    Problème de session...
    Au commencement j'avais ça :

    fichier : megaclass.php
    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
    <?php
    class megaClass
    {
      function __construct()
      {
         //code
      }
     
       //d'autres methodes
     
      function putinSession($cname)
      {
        $_SESSION['objetsession'] = $this;
      }
    }
    ?>
    fichier : class2.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    class class2 extends megaClass
    {
      function __construct()
      {
         parent:: __construct();
         //code
      }
     
       //d'autres methodes
    }
    ?>
    fichier : index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
     
    require megaclass.php
    require class2.php
     
    $class = new class2();
    $class->putinSession();
    ?>
    Donc voilà en gros (je pense que ca suffit comme code pour comprendre le pb). Tout fonctionnait, c'était merveilleux, je pouvais récupérer mon objet dans les autres pages sans problème, tout était ok.
    Mais j'ai decidé de faire une autre classe heritant de class2.
    Donc :
    fichier quifaitdeconner.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    class quiFaitDeconner extends class2
    {
      function __construct()
      {
        parent:: __construct();
        //code
      }
     
       //d'autres methodes
    }
    ?>
    et le fichier index.php modifié :
    fichier : index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
     
    require megaclass.php
    require class2.php
    require quifaitdeconner.php
     
    $class = new quiFaitDeconner ();
    $class->putinSession();
    ?>
    Et là ... dramatiquement, ça ne fonctionne plus. Si j'affiche la variable session contenant mon objet juste après l'avoir mis en session, pas de soucis, c'est ok. Mais dès que je veux le récupérer sur un autre pas ça déconne et il me met : "__PHP_Incomplete_Class Object".
    Et si je déclare un nouvel objet class2, j'ai pas d'erreur.

    Je me suis dit qu'il y avait un problème avec le session_start, mais comme ca fonctionnait avant je ne vois pas pourquoi ça ne fonctionnerait plus. J'ai regardé l'auto.start du php.ini, pas de soucis, il est a 0.
    Enfin voilà, je ne comprends pas pourquoi ça marchait avant et plus maintenant.
    Ou bien au niveau du constructeur ?

    Bref si quelqu'un a une moindre petit idée, je sus preneur.
    Merci !

  2. #2
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    Aucun probleme chez moi, testé en PHP 5.2.1 et PHP 4.3.10.

    Le code ci dessous fonctionne parfaitement :


    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    <?php
    session_start();
     
    if (isset($_GET['get'])) {
    	var_dump($_SESSION['objetsession']);
    }
     
    if (isset($_GET['set'])) {
    	$class = new quiFaitDeconner ();
    	$class->putinSession();
    }
     
    if (isset($_GET['clear'])) {
    	session_destroy();
    	$_SESSION=array();
    	session_start();
    }
     
    class otherClass {
     
    }
     
    class megaClass
    {
      var $otherClass;
      function __construct()
      {
         //code
    	 $otherClass = new OtherClass();
      }
     
       //d'autres methodes
     
      function putinSession()
      {
        $_SESSION['objetsession'] = $this;
      }
    }
     
    class class2 extends megaClass
    {
      function __construct()
      {
         parent:: __construct();
         //code
      }
     
       //d'autres methodes
    }
     
     
    class quiFaitDeconner extends class2
    {
      function __construct()
      {
        parent:: __construct();
        //code
      }
     
       //d'autres methodes
    }
     
    ?>
     
    <br>
    <a href="?clear">clear</a><br>
    <a href="?get">get</a><br>
    <a href="?set">set</a><br>
    La seule différence c'est que je n'ai pas plusieurs fichiers, tout est au meme endroit.
    Vérifie donc que tu as bien fait TOUT les require necessaires (les 3 classes) AVANT de chercher a récuperer quoi que ce soit (voir meme avant le session_start(), va savoir) je ne vois pas d'ou ca peut venir a part ca.

  3. #3
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 19
    Par défaut
    Oki,

    Voui, ça doit pas être grand chose, un truc vraiment à la con qui m'a échappé.
    J'étais pas là la fin de la semaine donc pas eu le temps de chercher, mais je vais aussi essayer de mettre un session_destroy comme tu as fait.

    Merci pour ta réponse et les indices de recherche.

  4. #4
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 19
    Par défaut
    hum... ok je suis ridicule.

    Après ce que tu m'as dit j'ai essayé de mettre toutes les classes dans le même fichier, et donc de faire appel uniquement à ce seul fichier... Et là il m'a mit une erreur "Cannot redeclare class blah blah", et c'est là que j'ai compris que j'avais oublié que je faisais appel ces classes ailleurs. Et donc j'avais oublié d'ajouter un require cet endroit....
    Je sais pas si j'ai été clair, mais en gros c'est juste que j'avais oublié d'inclure le fichier dans un script.

    Bon et bien merci, et désolé de t'avoir fait perdre du temps !

  5. #5
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    pas de probleme, et ca ne m'a pas pris trop de temps, juste un peu de copier/coller ;o)

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

Discussions similaires

  1. Chargement d'objets avec héritage
    Par djedje38 dans le forum Hibernate
    Réponses: 1
    Dernier message: 26/03/2008, 12h50
  2. Comment créer un composant orienté objet par héritage ?
    Par Amenofis dans le forum Composants VCL
    Réponses: 4
    Dernier message: 12/12/2007, 11h21
  3. Réponses: 13
    Dernier message: 22/06/2007, 20h49
  4. [Hibernate] Session & Objets persistants
    Par Gob4 dans le forum Hibernate
    Réponses: 3
    Dernier message: 22/05/2006, 15h13
  5. [Reflexivite]création dynamique d'objet et Héritage
    Par norkius dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 26/10/2004, 12h37

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