Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/05/2007, 21h04   #1
Membre confirmé
 
Inscription : novembre 2004
Messages : 364
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 364
Points : 202
Points : 202
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

Citation:
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 :
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 :
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 ?
tazmania est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2007, 21h59   #2
Membre confirmé
 
Inscription : mai 2006
Messages : 196
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 196
Points : 278
Points : 278
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 :
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à
meliandah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2007, 22h44   #3
Invité régulier
 
Inscription : mai 2003
Messages : 10
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 10
Points : 6
Points : 6
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.
XhEYtHeR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2007, 22h56   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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 :
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 :
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 :
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.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2007, 23h22   #5
Membre confirmé
 
Inscription : mai 2006
Messages : 196
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 196
Points : 278
Points : 278
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.
meliandah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2007, 12h35   #6
Membre confirmé
 
Inscription : novembre 2004
Messages : 364
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 364
Points : 202
Points : 202
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.
tazmania est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2007, 16h20   #7
Membre confirmé
 
Inscription : novembre 2004
Messages : 364
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 364
Points : 202
Points : 202
Ok sa marche nickel mais quand je retourne sur mon index.
Il n'y a plus aucun include qui fonctionne c'est normal
tazmania est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h38.


 
 
 
 
Partenaires

Hébergement Web