visibilité des objets en PHP5

visibilité des objets en PHP5 - PHP - Programmation

Marsh Posté le 16-10-2005 à 04:21:07    

dans une classe, j'ai besoin d'utiliser un objet déjà instancié dans le script (ma connection à la BDD), je ne veut pas créer une nouvelle instance de cette connection mais bien utiliser la même à l'intérieur de ma classe (je contabilise par exemple le nombre de requettes effectuées sur la page).
 
déjà que penser vous de cette façon de procéder? les classes doivent être normalement "indépendante", là elle fait appelle à un object instancié dans le script! une méthode pour rendre sa plus propre?
 
bon ceci marchait en PHP4, au début de ma classe je mettait un  
global $myDB ($myDB etant mon objet)
mais avec PHP5 ca ne passe pas!
la methode qui semble marcher c'est d'utiliser a chaque fois le tableaux $GLOBALS, donc a chaque fois que je veux utiliser $myDB à l'intérieur d'une classe, je dois tapper $GLOBALS["myDB"] ce qui est plus long. je ne vois pas trop la différence entre pouvoir acceder à cette objet et ses methodes par $GLOBALS ou directement la déclarer comme global pour la classe.
 
merci de votre aide.

Reply

Marsh Posté le 16-10-2005 à 04:21:07   

Reply

Marsh Posté le 16-10-2005 à 09:22:28    

J'ai pas trop touché à PHP5, mais dans les autres langages de programmation objet, ce que j'aurais fait c'est de passer ton objet dans le constructeur de ta classe. Ensuite tu le sockes comme variable membre de ta classe et tu t'en sers ou tu veux :
 

Code :
  1. $myDB = new DB(bla bla bla);
  2. $myA = new A($myDB, ...);


 
avec :
 

Code :
  1. class A {
  2.     var $db;
  3.     function __construct($aDb, ...){
  4.           $db = $aDb;
  5.     }
  6. }


 
voila le principe
 
++bonne prog


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
Reply

Marsh Posté le 16-10-2005 à 10:33:46    

En php5, tu peux rendre une variable globale à la classe (mot clé static) cette variable sera alors partagé par tous les objets de la classe. Il suffit alors de déclarer ta conection comme static dans la classe et quand tu cré un nouvel objet de la classe, tu poura utiliser la conection ouverte par un autre.
voir doc pour plus de détail : http://www.nexen.net/docs/php/anno [...] static.php
 
Sinon, c'est vrai que t'as la possibilité de déclarer ta conection comme globale mais si t'as une variable locale qui a le même nom, il faudrait utiliser $_GLOBALS pour pouvoir les diférencier. Pour éviter l'utilisation de $_GLOBALS, il faut mettre le "global $var;" dans la fonction.
 
Une autre solution, c'est de passer l'objet conection dans les paramettre de la classe ou de la fonction qui l'utilisera. On a alors pas besoin de la déclarer comme globale mais il faut se la trimbaler quasiment partout.


Message édité par omega2 le 16-10-2005 à 10:38:53
Reply

Marsh Posté le 16-10-2005 à 15:36:47    

merci, je pense que la passer en parametre pour la classe est une bonne solution, ca permet de bien visualiser les dépendances tout de suite, merci.

Reply

Marsh Posté le 16-10-2005 à 22:18:44    

Tu peux aussi regarder du coté des DesignPattern nottament le Singleton :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed