POO, classes de connexion et session

Mammouth du PHP | 737 Messages

13 janv. 2009, 02:46

Bonjour et tous mes voeux de bonheur à toutes et tous.

Dans mes résolutions de 2009, il y avait me mettre à la POO donc me revoilà après un long silence.

Je voudrais savoir à quoi sert concrètement une classe de connexion et ensuite comment la faire intérargir avec une classe d'objet : membres (par exemple) et gérer le tout via des sessions.
Je ne sais pas si j'ai été super clair dans mes explications...

Mon premier essai c'est soldé par un :

Code : Tout sélectionner

Fatal error: Call to private Connexion::__construct() from invalid context in C:\wamp\www\poo\index.php on line 6
Merci pour les pistes ;)

Mega
:)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

13 janv. 2009, 08:57

Salut :)

Alors, ton erreur signifie en langage clair que ton code tente d'accéder à la méthode __construct depuis un endroit où ce n'est pas permis.
Visiblement, ton constructeur est privé. Or, le constructeur, c'est le 1er truc appelé quand tu construits un objet et c'est donc forcément en dehors de l'objet. Du coup, le constructeur est obligatoirement public.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 737 Messages

13 janv. 2009, 10:26

Merci Zeus, ca faisait un bail !

Je tiens ma source de
http://www.phpcs.com/codes/CLASSE-CONNE ... 42561.aspx

J'ai farfouillé un peu sur le net, mais si tu as une classe plus optimisée je suis preneur pour l'étudier.

Sinon concernant le reste de mes interrogations, tu saurais y répondre :
Je voudrais savoir à quoi sert concrètement une classe de connexion et ensuite comment la faire intérargir avec une classe d'objet : membres (par exemple) et gérer le tout via des sessions.
Megadeth
;)

Eléphant du PHP | 185 Messages

13 janv. 2009, 12:13

La classe est dotée d'un Singleton getConnexion($host, $user, $pass, $base) qu'il faut utiliser pour récupérer une connexion valide. ;)

Mammouth du PHP | 737 Messages

13 janv. 2009, 15:36

Re,

Oui merci mais concernant ceci :
Je voudrais savoir à quoi sert concrètement une classe de connexion et ensuite comment la faire intérargir avec une classe d'objet : membres (par exemple) et gérer le tout via des sessions.
Je veux bien une classe b a ba de connexion (lien ou autre) histoire de bien comprendre, le minimum syndical car celle trouvée semble déjà pas mal élaborée...

Mega ;)

ViPHP
fab
ViPHP | 2657 Messages

13 janv. 2009, 16:06

Quand il s'agit de base ( et plus ) php.net fait souvent l'affaire http://fr.php.net/manual/fr/language.oop5.basic.php
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

ViPHP
AB
ViPHP | 5818 Messages

13 janv. 2009, 16:48

Visiblement, ton constructeur est privé. Or, le constructeur, c'est le 1er truc appelé quand tu construits un objet et c'est donc forcément en dehors de l'objet. Du coup, le constructeur est obligatoirement public.
Excepté pour les design patterns Singleton. D'ailleurs on pourrait justement s'inspirer de cet exemple pour faire une classe de connexion
class connect_bdd {

		private static $instance;
			
			private function __construct() {
					
			require('fichier_de_connexion.php');		
			mysql_select_db(...);
			}
			
			public static function getInstance() {
			
				if(self::$instance == NULL) self::$instance = new connect_bdd;
			}	 
}

//Connexion depuis n'importe quel endroit de la page en faisant
connect_bdd::getInstance();

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

13 janv. 2009, 16:57

Tiens donc, je ne savais pas que les singleton nécessitaient un constructeur privé ...
Il me semblait même qu'il fallait impérativement qu'il soit public pour ne pas avoir de Notice.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 4674 Messages

13 janv. 2009, 17:42

Hey :),

Tu peux avoir un constructeur protégé pour faire un singleton « familiale ». Si tu veux faire un singleton privé, alors ton constructeur doit être privé, ça dépend du contexte où tu veux instancier ta classe. En général, un singleton n'a de sens que dans un contexte privé, donc avec un constructeur privé. Mais ça peut marcher avec un constructeur public, sauf que l'utilisateur va faire ce qu'il veut ;-).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Mammouth du PHP | 737 Messages

14 janv. 2009, 01:30

Re,

Oui merci mais concernant ceci :
Je voudrais savoir à quoi sert concrètement une classe de connexion et ensuite comment la faire intérargir avec une classe d'objet : membres (par exemple) et gérer le tout via des sessions.
Je veux bien une classe b a ba de connexion (lien ou autre) histoire de bien comprendre, le minimum syndical car celle trouvée semble déjà pas mal élaborée...

Mega ;)
Sinon lol :lol: à quoi ca sert et quel est l'exemple le plus sommaire que l'on peut avoir ? :idea:

Mega ;)

ViPHP
AB
ViPHP | 5818 Messages

14 janv. 2009, 02:32

L'exemple le plus sommaire, je te l'ai donné plus haut. Tu remarqueras que c'est exactement le même principe (singleton) que le lien que tu avais trouvé mais résumé au strict minimum fonctionnel.

L'avantage de cette class c'est qu'elle ne sera instanciée qu'une fois quelque soit le nombre d'appels que tu feras à la fonction.

Sinon (évidemment) ce n'est pas en faisant une class de connexion que tu comprendras le mieux l'avantage de la poo par rapport au procédural.