JeuWeb - Crée ton jeu par navigateur
POO et DB - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : POO et DB (/showthread.php?tid=4598)

Pages : 1 2 3 4 5 6 7


RE: POO et DB - Cartman34 - 29-04-2010

Ca marche en C++ et en JAVA mais pas en PHP, PHP n'assure pas à ce niveau m'enfin on doit faire avec, vivement PHP6 et ses nouveautés.

Je suis pas trop pour l'exemple de christouphe car il utilise self:: et ça n'a pas vraiment ça place ici. $this-> serait beaucoup plus adapté.


RE: POO et DB - christouphe - 30-04-2010

(29-04-2010, 11:49 PM)IGstaff a écrit : Ca marche en C++ et en JAVA mais pas en PHP, PHP n'assure pas à ce niveau m'enfin on doit faire avec, vivement PHP6 et ses nouveautés.

Je suis pas trop pour l'exemple de christouphe car il utilise self:: et ça n'a pas vraiment ça place ici. $this-> serait beaucoup plus adapté.

Dans un contexte statique tu ne peux pas utiliser $this, 'fin je vais essayer pour voir tiens.

Mais bon tous les singletons sont fait de cette manière, j'ai pas cherché plus loin :p


RE: POO et DB - NicoMSEvent - 30-04-2010

une fonction statique peut être déclenché, même si aucun objet n'est instancié

$this pointe vers l'objet courant

self:: permet d'accéder à une variable statique (qui est commune a tous les objets instanciés, et qui existe avant le premier objet)

En suivant ces trois postulats, tu devrais pouvoir trouver la réponse a ton problème Wink


RE: POO et DB - christouphe - 30-04-2010

(30-04-2010, 08:34 AM)NicoMSEvent a écrit : une fonction statique peut être déclenché, même si aucun objet n'est instancié (1)

$this pointe vers l'objet courant (2)

self:: permet d'accéder à une variable statique (qui est commune a tous les objets instanciés, et qui existe avant le premier objet) (3)

En suivant ces trois postulats, tu devrais pouvoir trouver la réponse a ton problème Wink

En effet, je me sert de (1) pour mes factories, et je vois bien le (2), par contre le (3) personne me l'avais expliqué, ça veut dire qu'un script peut se planter si quelqu'un appele l'instance AVANT que j'ai créé la connexion, pas top ça... :'(

Merci pour ces éclairages Wink


RE: POO et DB - NicoMSEvent - 30-04-2010

un petit test (je ne l'ai pas essayé, donc il se peut qu'il y ai des erreurs)

class t_DB {
private static $instance;
private static $nb_appel;

public static GetInstance(){ // on peut appeler cette fonction sans objet instancié
echo 'appel n°'.(self::$nb_appel++).' : ';
if(! self::$instance){ //si mon instance n'existe pas -> ça ne plante pas
//$this->instance n'existe pas (inaccessible comme ça pcq c'est du static)
echo 'connexion a la DB';//bug du forum, il m'a mangé ma balise "br"
$instance=new t_DB(...); //j'instancie ici l'objet
}
else {
echo 'déja connecté';//bug du forum, il m'a mangé ma balise "br"
}
return self::$instance;//je retourne l'objet stocké
}

private __construct(){//le constructeur est privé pour empecher de créer une autre instance en appelant ceci hors de la classe
}

}
exemple d'appel

$connection_db=t_DB::GetInstance(...);
$connection_db=t_DB::GetInstance(...);

page HTML a écrit :appel n°1 : connexion a la DB
appel n°2 : déja connecté



RE: POO et DB - Cartman34 - 30-04-2010

Hormis l'exception getInstance() (et même), en général on instancie une classe...


RE: POO et DB - christouphe - 30-04-2010

C'est comme ça que je fais, dans mes classe, je ne sais pas si la connexion a été créée avant, donc pour éviter d'en avoir une qui bouffe l'autre (je suis en transactionnel), je récupère l'instance active.

Mais comme tu les dis, elle peut être instanciée par tout le monde du moment qu'on connait son existence, et c'est un de mes problèmes sur les factories.


RE: POO et DB - Anthor - 03-05-2010

@NicoMSEvent : tu as oublié de mettre en private la fonction __clone()


RE: POO et DB - Kihmé - 03-05-2010

avec vos aides j'ai ma connexion qui fonctionne et j'ai terminé mon mapping, je limite au maximum les interactions avec la base de données mais la volatilité des objets en php n'aide pas. Du coup j'ai sérialisé l'objet user en session et quand j'ai besoin je sérialise un objet particulier et je le passe dans l'url... J'ai opté pour une classe = une table et chacune de mes classes a accès à ma classe de connexion.

Dans le futur je pense m'essayer à une classe dont toutes les autres seront filles possédant des méthodes génériques pour les intérogations à la base de données, du style function selectInDatabase(tableau des champs à sélectionner, tableau des tables, tableau des conditions).


RE: POO et DB - NicoMSEvent - 03-05-2010

@Anthor : oui, en effet. Je n'ai pas encore utilisé le clonage, merci de m'avoir ouvert cette piste Wink
(je suis passé de php4 au 5 sans me poser de question :p )

Un petit lien qui m'a appris certaines choses intéressante, je pense qu'il est bon de le partager :
http://www.apprendre-php.com/tutoriels/tutoriel-74-methodes-magiques-clone.html

@Kihmé : j'ai le même problème que toi pour la volatilité des objets, je vais voir si il est possible de mettre en cache certains objets, et les partager entre différents utilisateurs (en les sérialisant via un fichier texte?)