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 :

[Cookies] durée de vie de l'objet


Sujet :

Langage PHP

  1. #1
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut [Cookies] durée de vie de l'objet
    Bonjour tout le monde!
    Tout d'abord:
    Je suis en php4 donc je sais que ce n'est pas vraiment de l'objet, ils ont rafiné cet aspect avec php5, mais bref ma question est en lien avec php4

    Voici ma question
    J'ai une classe de connexion a la base de donnée
    lorsque dans une autre de mes page, par exemple la page de login
    j'instancie mon objet de connexion et m'en sert pour faire mes requetes

    Bref jusque là..pas de pb

    Mon interrogation...la durée de vie de mon objet connexion est de combien de temps?...si je change de page sans appeller ma fonction deconnect de ma bd est ce que la connexion reste ouverte? et en instanciant un nouvel objet j'ouvre une autre connexion???

    je vous donne du code pour mieux expliquer
    ma classe

    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
     
    class cDBConnect{
    	var $host;
    	var $login;
    	var $pwd;
    	var $dbName;
     
    	var $conn;	
     
    	function cDBConnect(){
    		$this->host = '****;
    		$this->login = '***';
    		$this->pwd = '***';
    		$this->dbName = '***';
    	}
    	function connect(){
    		$this->conn = mysql_connect($this->host,$this->login,$this->pwd);
    		mysql_select_db($this->dbName,$this->conn);
    	}
    	function dbQuery($strScript){
    		return mysql_query($strScript);
     
    	}
    	function disconnect(){
    		mysql_close($this->conn);
    	}
    }
    code de la première instance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    		//Connection à la bd
    		$objCon = new cDBConnect();
    		$objCon->connect();
     
    		//Requête d'identification de l'usager
    		$script = "SELECT ajusteurID,ajusteurActif,ajusteurPrenom,ajusteurNom,typeAcces FROM tblAjusteur WHERE ajusteurLogin='$user' and numIdent='$numIdent' and ajusteurPWD='$pwd';";
    		$requete = $objCon->dbQuery($script);
    ...
    Bon tout ceci marche, il y a p-e place a amélioration, suggérer moi stp on apprends plus ainsi..

    Donc dans la prochaine page... si je me fais un nouvelle instance.. et ce sans avoir appeller la fonction disconnect(), est ce que ma connexion reste ouverte? et avec une nouvelle instance je peux directement utiliser la méthode dbQuery() sans préalablement avoir appeller connect()

    Je sais pas si je suis clair la

    avec mysql_connect() lorsque ton script avait finis d'executer la connexion se fermait elle-meme...par exemple avec un changement de page, pas de trouble, mais la est ce que ca va continuer ainsi puisque la méthode mysql_connect est dans une classe?
    ouff!!

    merci pour vos commentaires
    La perfection n'est pas un but, l'amélioration constante devrait l'être!
    La position des Développeurs de developpez avec les explications

  2. #2
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    A la fin d'un script, tout les objets créés sont détruits ainsi que les ressources.
    Donc à chaque page tu doit faire comme si tu repartais de zero.

    Il y a bien mysql_pconnect qui permet d'utiliser des connexions persistantes mais ce n'est pas forcément conseillé (diminue le nombre de connexion simultanée).

  3. #3
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    si je change de page sans appeller ma fonction deconnect de ma bd est ce que la connexion reste ouverte?
    avec mysql_connect toutes les connexion ouvertes sont fermées en fin de script.

    et en instanciant un nouvel objet j'ouvre une autre connexion???
    Toujours avec mysql_connect, si tu l'appels deux fois de suite avec les même arguments alors le second appel renverra le résultat du premier.

    et avec une nouvelle instance je peux directement utiliser la méthode dbQuery() sans préalablement avoir appeller connect()
    Non, puisque dans la nouvele page la connection est close.
    Donc l'ordre.
    Debut d'Execution de la page
    Tu instancie la classe de co (pas de connexion)
    Tu te connectes (ouverture de la connexion)
    Tu fais une requte

    Je ne suis perso pas partisan d'ouvrir la connexion dans le constructeur. En effet sa fait bizarre de se retrouver un gros fatal error alors que tu as juste instancié un objet.


    avec mysql_connect() lorsque ton script avait finis d'executer la connexion se fermait elle-meme...par exemple avec un changement de page, pas de trouble, mais la est ce que ca va continuer ainsi puisque la méthode mysql_connect est dans une classe?
    Ben oui, les classes ne changent rien à ce niveau la.

    Bye

  4. #4
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut
    Citation Envoyé par Mr N.
    A la fin d'un script, tout les objets créés sont détruits ainsi que les ressources.
    Donc à chaque page tu doit faire comme si tu repartais de zero.
    Citation Envoyé par ePoX
    avec mysql_connect toutes les connexion ouvertes sont fermées en fin de script.
    Ok excellent ca simplifie la chose effectivement!
    Merci pour vos réponses les amis
    Avant d'écrire résolu autre petite question?
    Est-il mieux d'instancier l'objet a chaque nouvelle page ou de mettre l'objet dans une variable session et d'appeller la méthode connect a chaque page?

    Ca revient au meme mais quelle manière a la plus recommendée?
    Deplus
    dans le code de ma classe...est ce que je devrais dans la déclarations de mes attributs, leur donner une valeur immédiatement au lieu de l'affecter dans le constructeur?

    Ainsi le constructeur serait vide...?Question de goût ou de convention??
    merci pour votre aide
    La perfection n'est pas un but, l'amélioration constante devrait l'être!
    La position des Développeurs de developpez avec les explications

  5. #5
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    Citation Envoyé par ozzmax
    Est-il mieux d'instancier l'objet a chaque nouvelle page ou de mettre l'objet dans une variable session et d'appeller la méthode connect a chaque page?

    Ca revient au meme mais quelle manière a la plus recommendée?
    moi je construit l'objet connexion à chaque nouvelle page, ce qui m'évite de sérialiser et ce qui me donne une meilleure visibilité de l'objet, mais je pense que ça se discute, d'ailleurs je n'ai jamais pensé à essayer de sérialiser une ressource...

    dans le code de ma classe...est ce que je devrais dans la déclarations de mes attributs, leur donner une valeur immédiatement au lieu de l'affecter dans le constructeur?
    je pense qu'il n'est pas obligatoire d'initialiser dans le constructeur puisque tu peux donner une valeur par défaut lors de la déclaration. Néanmoins, j'avais cette habitude en java pour bien nuancer les surcharges du constructeur, et puis par convention, on déclare toujours une variable (typée) en début de code...
    Maintenant je serais curieux d'avoir l'avis d'autres développeur, il se peut que je sois à côté de la plaque là

  6. #6
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut
    Citation Envoyé par ska_root
    Néanmoins, j'avais cette habitude en java pour bien nuancer les surcharges du constructeur, et puis par convention, on déclare toujours une variable (typée) en début de code...
    Ouais je faisais ca en java aussi alors je me demandais si je devais faire la meme chose ainsi
    Merci pour votre aide tout le monde!
    Bonne fin de semaine!
    La perfection n'est pas un but, l'amélioration constante devrait l'être!
    La position des Développeurs de developpez avec les explications

  7. #7
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Perso je préfére instancier à NULL, ou des valeurs bien spécifique, dans le constrcuteur.
    Sa m'évite de mauvaises surprises par la suite, notemment lors d'héritage ect.

    Si il y'à bien un objet que je ne serialiserai JAMAIS c'est celui ci.... Puisque comme à tout les coups il vas contenir login&mdp de la bdd et que PHP dans certaines configurations envoies/recupere les sessions par cookies... Et bah tu transmets ces informations PRIMORDIALES à la sécurité du site en clair et à tlm.... Le drame quoi.

  8. #8
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    moi j'ai un objet unique que je met en session, par contre il faut refaire la connexion dans la méthode __wakeup
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  9. #9
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    C'est quoi ton site siddh ? je vais aller y faire un tour ^^

  10. #10
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut
    Ok merci.. 8)
    En lien avec le post
    Est ce que je dois appeler obligatoirement la méthod disconnect() à la fin des script avant de changer de page?
    ou je prend pour acquis que tout les objet sont détruit a chaque page...?et ca résult en une fonction superflue?
    La perfection n'est pas un but, l'amélioration constante devrait l'être!
    La position des Développeurs de developpez avec les explications

  11. #11
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Je précise une petite nuance. Ce n'est pas parce que tu détruit ton objet de connection que la connection est explicitement fermée.

    Ceci dit en PHP5, mais ce n'est pas ton cas pour le moment, je ne me serait pas privé d'une petite fonction __destruct(){ mysql_cose(); }. A moins qu'il n'y ait une contre-indication, hors serialisation qui de souvenir à mécanisme très particulier dans ces cas la.

  12. #12
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    Citation Envoyé par La documentation php
    Note : La connexion au serveur sera fermée aussitôt que l'exécution du script se termine, à moins qu'elle soit fermée avant en appelant explicitement mysql_close().
    http://fr2.php.net/manual/fr/function.mysql-connect.php
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  13. #13
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut
    Ok merci
    ouais siddh c'est ce que j'avais lu aussi

    Donc en terme de propreté et convention de code je devrais faire appel a la méthode disconnect()
    mais si je ne le fais pas, le résultat sera le meme?
    La perfection n'est pas un but, l'amélioration constante devrait l'être!
    La position des Développeurs de developpez avec les explications

  14. #14
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    oui

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

Discussions similaires

  1. [XL-2007] Durée de vie d'un objet
    Par JLP64 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 17/10/2011, 08h46
  2. Durée de vie d'un objet
    Par ChrisCondit dans le forum Débuter
    Réponses: 1
    Dernier message: 03/09/2010, 14h59
  3. La durée de vie d'un objet
    Par archer dans le forum Langage
    Réponses: 2
    Dernier message: 11/02/2010, 14h17
  4. [A-03] Durée de vie des valeurs d'un objet personnalisé
    Par spaiku dans le forum VBA Access
    Réponses: 5
    Dernier message: 04/11/2008, 21h41
  5. Réponses: 5
    Dernier message: 14/12/2006, 21h18

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