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 :

Problème de logique avec les classes


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 38
    Points : 28
    Points
    28
    Par défaut Problème de logique avec les classes
    Bonjour, je me met depuis peu à la POO en php.

    J'explique mon problème, je possède 2 classes : mysql.php et user.php

    mysql.php sert à se connecter à une base de donnée, tout simplement.

    user.php possède des méthode pour un utilisateur.

    Certaines méthodes de la classe user ont besoin de récuperer/mettre à jour des infos de la base de donnée. Ma question est : Où dois-je ouvrir la connexion mysql, où dois-je la fermer? Dans chaque méthode? (je suis sur que non :p ) Dans la classe user? Dans le fichier où j'instancierais ma classe user?

    Merci d'avance.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Points : 1 177
    Points
    1 177
    Par défaut
    La pratique la plus courante, c'est de faire la connexion dans ton fichier mysql.php ton fichier user.php récupérera dans son constructeur une instance de la connnexion.

    Jette un oeil ou Design Pattern Singleton.
    http://www.jonathan-petitcolas.com/o...nnexion-mysql/

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 38
    Points : 28
    Points
    28
    Par défaut
    Merci pour ta réponse et petit site très intéressant au passage!

    Donc si je comprends bien, l'intérêt de m'avoir montré les singletons c'est d'avoir une méthode qui va vérifier la connexion mysql et le cas échéant en établir une nouvelle? Donc, une méthode à appeler dans chaque autre méthode?

    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
    class mysql {
     
          private static $instance;
     
          private function __construct()
          {
    		self::$instance = mysql_connect('localhost', 'root', '');
    		mysql_select_db('WorldCorp', self::$instance);
          }
     
          public static function GetInstance()
          {
    	        if(!isset(self::$instance)) {	
                           new mysql();
                    }
    	        return self::$instance;
          }
     
    }
     
     
    include('mysql.php');
    class user {
     
          public function __construct()
          {
    	     $connexion = mysql.GetInstance(); // possible ou pas possible?
          }
    }
    Ça peut paraître bête mais je suis un peu perdu... Je ne suis absolument pas sur de ce que j'ai écris dans le constructeur user.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Points : 1 177
    Points
    1 177
    Par défaut
    Si c'est ca sauf que la syntaxe n'est pas la bonne. Et que ta connexion doit être une variable privé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    include('mysql.php');
    class user {
          private connexion;
     
          public function __construct()
          {
    	     $this->connexion = mysql::GetInstance(); // possible ou pas possible?
          }
    }

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 38
    Points : 28
    Points
    28
    Par défaut
    merci beaucoup pour ton aide! Les singletons, sa facilite la vie

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Points : 1 177
    Points
    1 177
    Par défaut
    En faite, si j'ai un conseil a te donner c'est de d'utiliser des que possible les Design Pattern. Beaucoup de developpeurs réinventent la roue ou vont dans de mauvaises directions alors que une bonne connaissance des Design Patterns permet de s'affranchir de beaucoup de problèmes et d'avoir un code standard.

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/07/2011, 23h52
  2. Problème avec les classes et les méthodes abstract
    Par BOLARD dans le forum Langage
    Réponses: 5
    Dernier message: 22/09/2007, 20h27
  3. Problème avec les classes HttpWebRequest et HttpWebResponse sous C#
    Par zouzoulikou dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 14/08/2007, 01h46
  4. Problème avec les classes
    Par 30barrett40 dans le forum C++
    Réponses: 6
    Dernier message: 28/03/2007, 14h04
  5. [POO] PHP5 : Problème avec les classes
    Par fleur_de_rose dans le forum Langage
    Réponses: 9
    Dernier message: 06/05/2006, 19h09

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