Bonjour,
Je recrée un site en php5, et j'ai des informations communes à l'ensemble de la page. J'ai entre autre mon objet mysqli pour ma connection mysql, une variable m'indiquant si l'utilisateur est identifié (membre) ou si c'est un admin, et la langue choisie.
Pour utiliser ces variables dans l'ensemble de mes objets (pour ne pas refaire tous les tests sur mes variables de session à chaque instanciation de classe), j'ai étudié ces solutions :
- soit je passe les valeurs de mes variables en paramètre de mon constructeur. Je pense que ça marcherait, mais je n'apprécie pas trop : si un jour j'ai une variable de plus à passer, je vais devoir remodifier mes constructeurs, et passer un paramètre de plus à chaque appel de constructeur...
- soit je passe mes variables en globales. Mais justement, j'aimerais éviter! Et puis sérializer mes objets, ça ralonge le traitement.
- soit je crée des singletons. C'est la solution que j'essaie de voir plus en détails. Je connais la théorie des singletons, mais serait-il possible de créer un singleton contenant l'ensemble des valeurs qui m'intéresse, et de faire sur mes classes un extend de ce singleton?
Exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 class Classe_commune { protected static $langue; protected static $db; (...) public function set_langue (...) { } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 class Livredor extends Classe_commune { (...) public function __construct () { if (!isset($self::db) { $self::db = new mysqli(); } } public function liste () { $self::db->query(...); } }Cette solution semble-t'elle cohérente? Avez-vous d'autres idées?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 class News extends Classe_commune { (...) public function __construct () { if (!isset($self::db) { $self::db = new mysqli(); } } public function liste () { $self::db->query(...); } }
Merci d'avance
Partager