Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
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 30/08/2011, 09h17   #1
Membre habitué
 
Avatar de thebarbarius
 
Inscription : octobre 2008
Messages : 745
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 745
Points : 139
Points : 139
Par défaut Une classe qui execute une methode

Bonjour,

Voici un exmple pour illustrer mon probleme.

Ma classe :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
class test
{
  public function metthode1 
 {
   $this->connect($this);
   #...
}
 
  public function metthode2 
 {
   $this->connect($this);
   #...
}
}
Voila, en faite dans chaque methode je dois me reconneceter a une base de donnée.
Ce que je souhaiterai c'est que la classe generer cette action sans que j'ai a la definir repetrtivement.

Possible ?
thebarbarius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 09h51   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 116
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 116
Points : 8 465
Points : 8 465
met ta connexion quand un registry
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 09h55   #3
Membre habitué
 
Avatar de thebarbarius
 
Inscription : octobre 2008
Messages : 745
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 745
Points : 139
Points : 139
Je ne comprends quesqu'un registry ?
Un instance ?
thebarbarius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 10h00   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 116
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 116
Points : 8 465
Points : 8 465
c'est une classe qui stock statiquement ce que l'on veut, dont les instances
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 10h29   #5
Membre habitué
 
Avatar de thebarbarius
 
Inscription : octobre 2008
Messages : 745
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 745
Points : 139
Points : 139
Pourai je avoir un exemple simple ?
thebarbarius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 10h39   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 116
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 116
Points : 8 465
Points : 8 465
y'a plein d'exemple sur le net
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 17h33   #7
Rédacteur/Modérateur
 
Avatar de Thes32
 
Homme
Développeur Web
Inscription : décembre 2006
Messages : 2 335
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2006
Messages : 2 335
Points : 3 774
Points : 3 774
Registry est un pattern de développement, une extension du pattern Singleton.

Si tu n'as qu'une seule connexion à gérer, c'est mieux d'utiliser une classe singleton:

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
 
class DBConnexion{
 private static $instance = NULL;
 private $ress;
 
 const HOST = 'localhost';
 const DB = 'mydatabase';
 const USER = 'user';
 const PWD = 'user';
 
 private function __construct(){
  $this->ress = new mysqli(HOST, USER, PWD, DB);
  //
 }
 
 public function getInstance(){
   if(is_null(self::$instance)){
    self::$instance = new DBConnexion();
   }
 
   return self::$instance;
 }
 
 //d'autres méthodes...
}
__________________
Développeur | Zend Certified Engineer

Étapes Pour mieux se servir du forum:
1. Commencez par lire les cours et tutoriels ;
2. Faites une recherche;
3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

Nix>_Rien n'est plus pratique que la théorie
Thes32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 12h44   #8
Membre habitué
 
Avatar de thebarbarius
 
Inscription : octobre 2008
Messages : 745
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 745
Points : 139
Points : 139
Merci, de votre reponse qui m'aide enormement.

Par contre je ne gere pas qu'un connexion mais 2 voir 3.

Qu'en est il maintenant ?
thebarbarius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 12h59   #9
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 012
Points : 5 012
Pattern Identity Map pour conserver une série d'instances uniques (ces instance peuvent être d'une même classe).

Voir: http://martinfowler.com/eaaCatalog/identityMap.html
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 13h05   #10
Membre habitué
 
Avatar de thebarbarius
 
Inscription : octobre 2008
Messages : 745
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 745
Points : 139
Points : 139
Je ne comprends pas vraiement l'anglais.

Si possible pourriez vous passez un code d'exemple comme la fait Thes32 ?
Je vous remercie
thebarbarius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 13h09   #11
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 012
Points : 5 012
Avant que je me lance là dedans, pourquoi as-tu 2-3 connexions ouvertes en même temps ?
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 13h17   #12
Membre habitué
 
Avatar de thebarbarius
 
Inscription : octobre 2008
Messages : 745
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 745
Points : 139
Points : 139
Parcque que j'ai besoin de SQL server pour certaine chose et mysql pour d'autre.
thebarbarius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 14h26   #13
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 012
Points : 5 012
Je pense qu'une classe tout bête de ce genre peut faire l'affaire:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/**
 * Classe ConnectionManager
 * @subpackage ConnectionManager
 */
class ConnectionManager {
 
	/**
	 * Connections disponibles
	 * @var array
	 */
	protected static $_connections = array();
 
	/**
	 * Ajouter une connection
	 * (utilse le même prototype que le constructeur
	 * de PDO)
	 * 
	 * Renvoie un identifiant arbitraire si la connexion à
	 * été ouverte avec succès, false sinon.
	 *
	 * @param string $dsn
	 * @param string $username
	 * @param string $password = ""
	 * @param array $driver_options = array()
	 * @return integer
	 */
	public static function addConnection ($dsn, $username, $password= "", array $driver_options = array()) {
		try {
			$pdo = new PDO($dsn, $username, $password, $driver_options);
		}
		catch (PDOException $e) {
			return false;
		}
 
		self::$_connections[$id = crc32($dsn)] = $pdo;
		return $id;
	}
 
	/**
	 * Supprime une connection identifiée par $id
	 * (la valeur de $id est l'une des valeurs retournée
	 * par ConnectionManager::addConnection).
	 * @param integer $id
	 * @return boolean
	 */
	public static function removeConnection  ($id) {
		if (isset(self::$_connections[$id])) {
			unset(self::$_connections[$id]);
			return true;
		}
		return false;
	}
 
	/**
	 * Obtenir un objet de connection identifié par $id
	 * (la valeur de $id est l'une des valeurs retournée
	 * par ConnectionManager::addConnection).
	 *
	 * Si la connection correspondant à cet id n'a pas
	 * été trouvé, null est retourné
	 *
	 * @param integer $id
	 * @return PDO
	 */
	public static function getConnection ($id) {
		if (isset(self::$_connections[$id])) {
			return self::$_connections[$id];
		}
		return null;
	}
}
(note: j'ai pas testé)

Tu peux l'utiliser de cette manière:
Code :
1
2
3
4
$c1 = ConnectionManager::addConnection('mysql:dbname=test;host=localhost', 'root');
$c2 = ConnectionManager::addConnection('mysql:dbname=test;host=192.168.0.10', 'mysql', 'mypwd');
 
ConnectionManager::getConnection($c1)->query('SELECT ...');
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h52.


 
 
 
 
Partenaires

Hébergement Web