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 :

[POO] objet mysql dans un autre objet


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Points : 10
    Points
    10
    Par défaut [POO] objet mysql dans un autre objet
    Bonjour,
    je me suis lancé dans la poo, il y a peu, et j aurais aimé savoir comment utiliser un objet dans un autre.

    J'ai fait comme suite.
    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
    class mysql {
    	public $db;	
     
    	function __construct() {
    		mysql_connect('xxx', 'yyy', 'zzz');
    		mysql_select_db($this->db = 'aaa');
    	}
     
    	function __destruct() {
    		mysql_close();
    	}
     
        function query($qr) {
    	    return mysql_query($qr) or die(mysql_error());
    	}
    }
    ?>

    Et la classe devant l utilisé.
    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
    <?php
    require_once('mysql.class.php5');
     
    $db = new mysql();
    class FSection { 
     
        function __construct() {
    	}
     
        function printFSection($db) {
    	$req = $db->query('SELECT * FROM Fsection') or die('zut') ;
            while ($donnees = mysql_fetch_array($req)) {
                print($donnees['FSection_name']. "\r\n");
    	}
        }
    }
     
    $section = new FSection();
    $section->printFSection($db);
    ?>
    Comment dois-je fait pour utiliser ma query dans une autre classe?
    Merci d'avance.

  2. #2
    Membre habitué
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 144
    Points : 151
    Points
    151
    Par défaut
    Essaye comme ceci :
    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
     
    <?php
    require_once('mysql.class.php5');
     
    class FSection { 
     
        public $db // Connexion à la base de données
     
        function __construct() {
          $this->db = new mysql();
        }
     
        function printFSection() {
    	$req = $this->db->query('SELECT * FROM Fsection') or die('zut') ;
            while ($donnees = $this->db->fetch_array($req)) {
                print($donnees['FSection_name']. "\r\n");
    	}
        }
     
        // Tu devras aussi récrire une fonction fetch_array dans ta classe mysql
        // par exemple : public function fecth_array($req)
        //                    {
        //                        return mysql_fetch_array($req);
        //                    }
     
    }
    ?>

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Alors je devrai créer une nouvelle connection à la base de donnée pour chaque objet, non?

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 230
    Points
    20 230
    Par défaut
    Tu peux également passer au constructeur de ta classe l'objet mysql précédemment instancié

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $db = new Mysql();
    /*...
    */
    $Fs = new FSection($db);
    Puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class FSection
    {
       private oDb;
    function __construct($objetbdd) {
    $this->oDb = clone($objetbdd); // Pas sur que le clone soit indispensable
    	}
    Et pour finir dans ta classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->oDb->methodeMysql()
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre habitué
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 144
    Points : 151
    Points
    151
    Par défaut
    oui tu devras créer une connexion à ta base de données mais à ce moment la tu peux créer ta classe de connexion sous la forme de sngleton. Une seule instance ne sera créé et tu renverra cette instance à chaque nouvel connexion.
    Exemple :
    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
     
    class mysql {
     
       public $connexion;
     
       /**
        * Constructeur de classe
        * @access private
        * @return void
        */
       // Methode privée qui bloque le new mysql() en dehors de la classe
       private function __construct()
       {
          $this->connexion = $this->connect($host, $user, $pass, $dbname);
       }
     
       /**
        * Permet de récupérer l'instance du singleton
        * @access public
        * @return void
        */
       public static function getInstance()
       {
          if (!isset(self :: $instance)) {
             // Le new mysql() fonctionne car tu l'appel à l'intérieur de ta classe
             self :: $instance = new mysql();
          }
          return self :: $instance;
       }
    }
    Au lieu d'instancier la classe en faisant :
    Tu devras faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $db = mysql :: getInstance();
    L'avantage est que cela garantie qu'une seule connexion ne sera ouverte dans toutes tes classes. Renseigne toi sur le pattern Singleton

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Merci, cela fonctionne.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/01/2015, 19h29
  2. POO : référencer un objet dans un autre objet
    Par Tittom dans le forum Langage
    Réponses: 4
    Dernier message: 07/04/2013, 22h13
  3. Réponses: 2
    Dernier message: 28/06/2008, 23h08
  4. Réponses: 4
    Dernier message: 11/04/2007, 14h26
  5. Réponses: 2
    Dernier message: 24/08/2006, 22h39

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