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 :

[php objet] constructeur lancer à chaque changement de page


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 26
    Points : 26
    Points
    26
    Par défaut [php objet] constructeur lancer à chaque changement de page
    voilà, je compte utilisé les objets en php.
    je me suis retrouver face à un problème qui est que le constructeur se lance à chaque changement de page et j'ai pas trouver le moyen de garder les objets.

    en gros, j'ai un objet noyaux qui contient en ensemble d'autre objet pour la construction de la page.
    le constructeur de mon noyau initialise différent objet qu'il contient, comme l'objet menu.
    dans cet objet menu, le constructeur fait une requète sql pour générer le menu. et ces requètes ne doivent être faites que s'il y a un changements dans les autorisations.
    genre un visiteur non logué n'as pas le même menu qu'un visiteur logué et qu'un admin logué.
    donc en gros il ne devrait il y avoir de requète sql pour le menu qu'à l'ouverture du site et au log on de l'utilisateurs.

    et dans le cas présent, il y a des requètes à chaque fios qu'on navigue sur le site.

    si quelqu'un a une solutions à proposé, je suis preneur.

    si je demande de l'aide ici, c'est que j'ai pas trouvé par mes propres recherches.
    veuillez m'excuser si la réponse est présente ici, je ne l'ai pas trouvé

  2. #2
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Pour passer les objet d'une page a l'autre il te faut utiliser serialize et unserialize Et les variables de sessions

    Par contre il te faudra definir dans ta classe les methodes __sleep et __wakeup.
    Au moins __sleep en tous cas
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    pourquoi des sleep? je coupe les connection sql sql après chaque requète.

    le serialize, pour les objets avec des collections d'objet, je ne le fais que sur celui qui les contients? ou je doit aussi le faire pour les objets contenu dans celui ci?


    donc si j'ai bien suivit ça donnerais ça:

    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
     
    <?php
    session_start();
    include ('fichierdelaclass.php');
     
    if ($_SESSION['myobject']=='')
    {
         $object=new nomclass();
    }
    else
    {
         $object=unserialize($_SESSION['myobject']);
    }
     
    //utilisation de l'objet
     
    $_SESSION['myobject']=serialize($object);
    ?>
    ça serait quelque chose comme ça alors?

  4. #4
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Non pas des sleep! une methode __sleep, elle sert a specifier a serialize ce qu'il doit traiter comme variable
    Sinon oui ton code est pas mal teste mais tu risque d'avoir une surprise
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    en fait la question avec __sleep , c'était est ce que c'est obligatoire s'il n'y a pas de connection ouverture. parce que normalement quand j'arrive au serialize à la fin du script, toutes les connections sql sont fermées.

    oups, j'ai oublié des virgules dans mon code. pas bien. bon je vais test ça.

  6. #6
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Oui test, parce que moi j'avais pas mit de __sleep et je n'avais pas le données comme il fallait
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    • Les méthodes magiques __sleep et __wakeup n'ont pas besoin d'être implémentées dans tous les cas (et heureusement).
    • Vous n'avez pas besoin de faire vous-même appel aux opérations de sérialisation et désérialisation pour une variable de session : elles sont déjà réalisées par PHP en coulisses (comment pensez-vous qu'il peut les conserver même pour une variable d'un type de base ?)
    • La déclaration de la classe doit impérativement être faite avant l'appel à session_start

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    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
     
    <?php
    session_start();
     
     
    class nomclass{ 
        var $compteur;
    	public function __construct() {
    		$this->compteur=0;
        }
    	public function increment()
    	{
    		$this->compteur++;
    	}
    	public function affiche()
    	{
    		echo $this->compteur;
    	}
      } 
     
    if ($_SESSION['myobject']=='')
    {
         $object=new nomclass();
    }
    else
    {
         $object=unserialize($_SESSION['myobject']);
    }
     
    $object->increment();
    $object->affiche();
     
    $_SESSION['myobject']=serialize($object);
    ?>

    Avec ça, ça passe niquel. Par contre sans les serialize et unserialize, j'ai cette erreur :

    Fatal error: Call to a member function increment() on a non-object in E:\localhost\test\test.php on line 31
    donc je laisse avec et le problème est résolu.

    merci bien.
    apparemment, ça gène pas d'avoir la déclaration de classe après l'ouverture de session, j'ai pas d'erreur avec ce code là.

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Message d'erreur que vous obtenez peut être parce que votre session au moment du test contenait déjà un objet sérialisé deux fois et désérialisé une seule fois (une chaîne n'étant pas un objet nomclass ...).

    La forme suivante est quand même plus simple à utiliser :
    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
    <?php
    class nomclass{ 
        var $compteur;
    	public function __construct() {
    		$this->compteur=0;
        }
    	public function increment()
    	{
    		$this->compteur++;
    	}
    	public function affiche()
    	{
    		echo $this->compteur;
    	}
      } 
     
    session_start();
     
    if (!isset($_SESSION['myobject']))
    {
         $object=new nomclass();
    }
    else
    {
         $object=$_SESSION['myobject'];
    }
     
    $object->increment();
    $object->affiche();
     
    $_SESSION['myobject']=$object;
    ?>
    Note : vous utilisez le mot-clé var pour déclarer votre attribut donc sa visibilité sera publique (assure la compatibilité avec PHP 4).

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

Discussions similaires

  1. [1.x] exécution d'une action a chaque changement de page
    Par Tiph13 dans le forum Symfony
    Réponses: 2
    Dernier message: 15/12/2010, 12h12
  2. header disparait et réapparait à chaque changement de page
    Par antho2601 dans le forum Général Conception Web
    Réponses: 5
    Dernier message: 08/10/2010, 10h39
  3. Réponses: 0
    Dernier message: 08/04/2010, 22h31
  4. Réponses: 1
    Dernier message: 12/03/2009, 20h31
  5. reinitialisation d'une session a chaque changement de page
    Par RR instinct dans le forum Langage
    Réponses: 3
    Dernier message: 26/10/2006, 17h09

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