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 :

Deux questions constructeur et session


Sujet :

Langage PHP

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 364
    Points : 253
    Points
    253
    Par défaut Deux questions constructeur et session
    Salut à tous,

    Sa y est, je me mets au php5 mais je galère pas mal.
    J'ai quelques soucis, tout d'abord j'ai fait deux constructeurs, un avec argument et l'autre sans.
    Le problème c'est celui avec argument. Sa ne passe pas j'ai une erreur qui s'affiche.
    Je ne peux pas redéclarer une fonction Construct

    Fatal error: Cannot redeclare nomDeMaClasse::__construct() in C:\wamp\www\Mon site\Includes\Classes\User.php on line 80
    Sinon mon autre soucis c'est que lorsqu'un utilisateur se connecte, je veux garder cette utilisateur à travers les différentes pages du site.
    J'utilise donc les variables de session.
    Lorsque mon utilisateur se connecte je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $membre=new User($pseudo,$password);
     
    //Je stocke le membre dans une variable de session
    $_SESSION['membre'] = serialize($membre);
    Mais dans chaque page, je dois savoir si l'utilisateur s'est connecté ou pas afin de savoir sa je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset(unserialize($_SESSION['membre']))) {
    Mais là aussi je rencontre une erreur et à vrai dire je ne sais pas si ça se fait.

    Comment est-ce je peux corriger ces deux erreurs ?

  2. #2
    Membre averti

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 206
    Points : 319
    Points
    319
    Par défaut
    Alors pour ta première question , le PHP ne supporte pas la surcharge de fonction, donc tu ne peut pas faire deux fonctions portant le même nom même si les argments diffèrent, le JAVA ou le C++ savent faire sa mais pas PHP .

    Sinon pour la serialisation des objets , ces fonctions renvoi soit une chaîne de caractère pour serialize(), soit l'objet ou la variable qui a été sérialisée pour unserialize(), utilise les comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $membre=new User($pseudo,$password);
     
    //Je stocke le membre dans une variable de session
    $_SESSION['membre'] = serialize($membre);
     
    /*Jusque la tout va bien. */
    $membre = unserialize($_SESSION['membre']); 
    /*Tu retrouvera ton objet dans $membre dans l'état ou il était 
    avant de le sérialiser, néanmoins tu peut aussi crée une fonction (dans l'objet)
    __sleep() qui sera lancée par ton objet juste avant d'être serialisé, ou
    __wakeup() qui sera lancée lors de la dé-sérialisation. */
    Voilà

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2003
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par meliandah
    Alors pour ta première question , le PHP ne supporte pas la surcharge de fonction, donc tu ne peut pas faire deux fonctions portant le même nom même si les arguments diffèrent, le JAVA ou le C++ savent faire sa mais pas PHP .
    Personnellement quadn j'ai vbesoin de faire de la 'surcharge' de fonction je fait cela avec des paramètres optionnels auxquel je colle la valeur que j'aurai utiliser dans le cas d'un appel sans paramètres. On doit aussi pouvoir faire une fonction sans arguments et utiliser les fonctions func_get_args et func_num_args.

  4. #4
    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 777
    Points
    17 777
    Par défaut
    Les variables stockées dans une session (objet ou non) n'ont pas besoin d'être sérialisées ou désérialisées. Cette opération est réalisée en coulisse par PHP.

    Illustration :
    Code utilisateur.class.php : 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
    class Utilisateur {
        var $identifiant;
        var $login;
     
        function Utilisateur($id, $login) {
            $this->identifiant = $id;
            $this->login = $login;
        }
     
        function getLogin() {
            return $this->login;
        }
     
        function getIdentifiant() {
            return $this->identifiant;
        }
    }
    Enregistrement dans la session :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    session_start();
    require_once('utilisateur.class.php'); // Peut être effectué avant comme après session_start()
     
    $_SESSION['util'] = new Utilisateur(1, 'toto');
    Et, enfin utilisation des données de la session :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    require_once('utilisateur.class.php'); // Déclaration impérativement avant session_start()
    session_start();
     
    if (isset($_SESSION['util'])) {
        echo 'Bonjour ' . $_SESSION['util']->getLogin();
    }
    Par contre, une ressource (connexion à une BD, ...) ne peut pas être sérialisée (et désérialisée). Les méthodes magiques __sleep et __wakeup servent à traiter des cas spécifiques comme la resturation d'une ressource à partir de ses paramètres. Dans la plupart des cas, elles ne sont pas nécessaires.

  5. #5
    Membre averti

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 206
    Points : 319
    Points
    319
    Par défaut
    Citation Envoyé par XhEYtHeR
    Personnellement quadn j'ai vbesoin de faire de la 'surcharge' de fonction je fait cela avec des paramètres optionnels auxquel je colle la valeur que j'aurai utiliser dans le cas d'un appel sans paramètres. On doit aussi pouvoir faire une fonction sans arguments et utiliser les fonctions func_get_args et func_num_args.
    Oui mais la VRAIE surcharge qui consiste à créer plusieurs fonctions mais avec différents paramètres comme on l'apprend en cours et pour la POO en JAVA/C++, et bien PHP ne sais pas le faire, on ne peut pas créer 2 fonctions portant le même nom dans un même objet (mais on peut par héritage : la c'est de la redéfinition de fonctions ):o sinon utilise la fonction __call mais pas pour un constructeur.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 364
    Points : 253
    Points
    253
    Par défaut
    Merci pour toutes ces précisions.
    Je vais donc essayer de passer par des paramètres optionnels pour mon constructeur.
    Sinon c'est cool que PHP gère la sérialisation et la désérialisation des objets.

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 364
    Points : 253
    Points
    253
    Par défaut
    Ok sa marche nickel mais quand je retourne sur mon index.
    Il n'y a plus aucun include qui fonctionne c'est normal

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

Discussions similaires

  1. [Sécurité] Question sur les sessions
    Par Seth77 dans le forum Langage
    Réponses: 20
    Dernier message: 25/01/2006, 12h34
  2. Deux questions
    Par sheira dans le forum ASP
    Réponses: 10
    Dernier message: 25/11/2005, 12h49
  3. [Together] Deux questions sur Borland Together UML
    Par srvremi dans le forum Autres
    Réponses: 4
    Dernier message: 02/11/2005, 09h32
  4. [Débutant] Deux questions concernants les vues
    Par 13obscur dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 19/04/2005, 14h29
  5. deux questions
    Par Invité4 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 21/03/2005, 14h20

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