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 31/07/2011, 12h31   #1
Invité de passage
 
Inscription : septembre 2010
Messages : 2
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 2
Points : 0
Points : 0
Par défaut Portée d'un objet d'une classe perso

Bonjour à tous,

voici ma question:

j'ai développé un petit environnement web pour moi. Cet environnement gère des reunions de travail et chaque réunion est entrée par l'intermédiaire d'une page précise. Cette page est générée automatiquement via l'ajout de différents modules, selon que ces modules soient autorisés à l'affichage pour l'utilisateur connecté... (page appelée page.php)

Aucun souci jusque là forcément...
Ensuite, j'ai une class Reunion que je déclare dans un fichier externe (fonctions.php) et je l'instancie juste après sa déclarationafin de créer mon objet via un : $reunion = new Reunion();

Aucun soucis jusque là...

Je reviens à présent sur ma page.php à présent. Dans cette page, avant tout autre chose, j'appelle le fichier fonctions.php via un require_once. Je peux désormais utiliser l'objet $reunion et lui définit quelques nouvelles valeurs à ses attributs (genre reunion->date=machintruc). Si je les affiche pas de problème non plus.

Ensuite ma page.php doit afficher les modules, et là, c'est le drame

J'utilise, pour afficher mes modules, une fonction (afficher_module) présente dans mon fichier functions.php. Dans cette même fonction, je teste si l'utilisateur en cours peut afficher le module et je l'affiche, le cas échéans, par un require_once du script php du module (ex: require_once (module_choix_date.php)).
Sauf que si le module a besoin de mon objet $reunion déclaré précédemment, cela va m'afficher une erreur.

En effet, je fais un require_once à l'intérieur d'une fonction et mon objet $reunion n'est forcément pas accessible dans cette fonction puisqu'une fonction n'a que des variables qui lui sont propres...

Je peux régler/contourner le problème en rajoutant un 'global $reunion' dans la fonction mais je ne trouve pas ça très propre...

Existe-t-il un autre moyen pour rendre mon objet $reunion accessible de partout dans le script en cours?

Merci de votre lecture
Everice est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2011, 13h00   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 114
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 114
Points : 8 462
Points : 8 462
Hello, oui tu peux faire ça via du statique et Registry

pour ensuite l'avoir (par exemple) comme ça :
Code :
Registry::get('reunion');
pour enregistrement ça sera :
Code :
Registry::set('reunion', $reunion);
petit 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
31
class Registry
{
    private static $_storage;
 
    public static function get($name)
    {
        if(isset(self::$_storage[$name]))
        {
            return self::$_storage[$name];    
        }
 
        throw new UnexpectedValueException();
    }
 
    public static function set($name, $value)
    {
        self::$_storage[$name] = $value;
    }
}
 
$var = 'test';
Registry::set('var', $var);
 
 
function hello()
{
    $var = Registry::get('var');
    var_dump($var);
}
 
hello();
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2011, 13h51   #3
Invité de passage
 
Inscription : septembre 2010
Messages : 2
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 2
Points : 0
Points : 0
Oki oki... Je n'avais pas réfléchi à cette possibilité d'utiliser une autre class...

Un grand merci
Everice 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 13h38.


 
 
 
 
Partenaires

Hébergement Web