Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
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 12/05/2008, 10h30   #1
Invité de passage
 
Inscription : mai 2008
Messages : 12
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 12
Points : 4
Points : 4
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 :
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 :
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.
ibasticour est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2008, 11h58   #2
Membre habitué
 
Étudiant
Inscription : janvier 2008
Messages : 144
Détails du profil
Informations personnelles :
Âge : 23

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2008
Messages : 144
Points : 114
Points : 114
Essaye comme ceci :
Code :
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);
    //                    }
 
}
?>
juninho269 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2008, 14h22   #3
Invité de passage
 
Inscription : mai 2008
Messages : 12
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 12
Points : 4
Points : 4
Alors je devrai créer une nouvelle connection à la base de donnée pour chaque objet, non?
ibasticour est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2008, 16h24   #4
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 319
Points : 3 319
Tu peux également passer au constructeur de ta classe l'objet mysql précédemment instancié

Code :
1
2
3
4
$db = new Mysql();
/*...
*/
$Fs = new FSection($db);
Puis

Code :
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 :
$this->oDb->methodeMysql()
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2008, 18h07   #5
Membre habitué
 
Étudiant
Inscription : janvier 2008
Messages : 144
Détails du profil
Informations personnelles :
Âge : 23

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2008
Messages : 144
Points : 114
Points : 114
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 :
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 :
$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
juninho269 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2008, 23h19   #6
Invité de passage
 
Inscription : mai 2008
Messages : 12
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 12
Points : 4
Points : 4
Merci, cela fonctionne.
ibasticour 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 16h26.


 
 
 
 
Partenaires

Hébergement Web