Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
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 23/06/2006, 19h47   #1
Invité de passage
 
Inscription : juin 2006
Messages : 11
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 11
Points : 2
Points : 2
Par défaut [SQL] Les données de configuration d'un script

Bonjour,

Je suis en train de developper un script complet, et celui-ci s'appuit sur des dizaines de variables de configuration (permettant par exemple de configurer le domaine de cookie, la durée maximale d'inactivité des sessions, ou encore le nombre de messages par page).

J'ai donc besoin d'accéder à ces variables partout dans mon script : à l'interieur des pages, à l'interieur des fonctions, mais aussi à l'interieur de quelques objets. Je me demandais alors comment définir ces variables.

Une idée serait de les définir en global, et d'y accéder ensuite par le tableau $_GLOBALS, mais d'après ce qu'on m'a dit ici, des variables globales n'avaient pas beaucoup de sens dans des fonctions, et encore moins dans des objets.

Cependant, il est presque inconcevable de devoir les passer en argument à chaque fonction. Sinon, une fonction getcookie() s'occupant de la lecture d'un cookie en gérant automatique le prefix par défaut n'aurait plus aucun sens. De même, si je devais passer en argument des dizaines de variables en arguments à certaines fonctions, je ne m'en sortirai jamais !

Ma dernière idée : utiliser les constantes. J'ai vu que beaucoup de systèmes, comme xoop, utilisent cette méthode pour leur variables de configuration, ou leurs variables "langages".

Qu'en pensez vous ?
Que pouvez vous me conseiller ?
Malikak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2006, 23h13   #2
Membre régulier
 
Inscription : juin 2004
Messages : 92
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 92
Points : 75
Points : 75
chacun ses gouts, pour ma part je préfère un tableau de variables, ce qui me permet de n'avoir qu'une variable appelée et que je peux moduler.

Par exemple:
Code :
1
2
3
4
5
6
7
8
$config['db']['host'] = "localhost";
$config['db']['base'] = "mabase";
$config['db']['user'] = "root";
$config['db']['pass'] = "";
 
$config['path']['real'] = "/home/crazicat/www/";
$config['path']['images'] = "/images";
...
Et je peux soit appeler $config, soit $config['base'] soit $config['path'], ...
Bref, je me fais ma variable globale à moi
CrazyCat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2006, 23h45   #3
Invité de passage
 
Inscription : juin 2006
Messages : 11
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 11
Points : 2
Points : 2
Oui, mais tu ne peux pas l'utiliser à l'interieur des fonctions... sauf si tu la passes en argument à chaque fois, mais c'est pas pratique... ou si tu la passes en global, mais beaucoup le déconseillent...
Malikak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2006, 23h48   #4
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Expert PHP
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
tu laisses ça dans une page .php et tu l'inclus quand tu en as besoin.
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2006, 10h10   #5
Invité de passage
 
Inscription : juin 2006
Messages : 11
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 11
Points : 2
Points : 2
J'ai l'impression que ma question n'est pas clair... elle porte avant tout sur la portée des variables :

Une variable $config, c'est bien, mais ce n'est valable qu'en locale, donc ce n'est pas utilisable à l'interieur des fonctions, ni même à l'interieur des objets. Et appeller cette page dans chaque fonction, et ce à chaque appel de la-dite fonction, est plutot inconcevable.
Malikak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2006, 10h39   #6
Rédacteur
 
Avatar de Eric Berger
 
Inscription : octobre 2002
Messages : 340
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : octobre 2002
Messages : 340
Points : 475
Points : 475
Envoyer un message via ICQ à Eric Berger Envoyer un message via MSN à Eric Berger Envoyer un message via Skype™ à Eric Berger
Citation:
Envoyé par Malikak
Une variable $config, c'est bien, mais ce n'est valable qu'en locale, donc ce n'est pas utilisable à l'interieur des fonctions, ni même à l'interieur des objets. Et appeller cette page dans chaque fonction, et ce à chaque appel de la-dite fonction, est plutot inconcevable.
Si la variable $config (ou ta liste de variables) est définie a l'extérieur d'une fonction ou d'une classe, sa portée sera globale et tu pourras l'utiliser depuis une fonction sans la passer en argument.

Je te conseille d'aller jeter un oeil directement sur la doc officielle, c'est très bien expliqué
http://www.php.net/manual/fr/languag...bles.scope.php
Eric Berger est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2006, 11h35   #7
Membre Expert
 
Avatar de ska_root
 
Homme
Développeur informatique
Inscription : août 2005
Messages : 1 179
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : août 2005
Messages : 1 179
Points : 1 580
Points : 1 580
Salut,

tu peux aussi rendre globale la portée de tes variables en les déclarant à l'aide de la fonction define() ce qui fait de cette variable une constante.

Mais c'est la même chose que les autres, il faut inclure un fichier de setup dans la page. Je ne suis pas sûr que tu aies bien compris que l'inclusion peut être faite avant tout appel à une classe ou une fonction.

Citation:
Envoyé par doc officielle PHP
Tous comme les superglobals, les constantes sont accessibles de manière globale. Vous pouvez la définir n'importe où, et y accéder depuis n'importe quelle fonction.
__________________
http://cdemarche.developpez.com/

Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
ska_root est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2006, 13h35   #8
Invité de passage
 
Inscription : juin 2006
Messages : 11
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 11
Points : 2
Points : 2
Je pense que vous n'avez pas compris le sens de ma question. Ou que vous n'avez pas du tout compris mon message initiale.

Vous me parlez de "variables globales" ou de "constante", alors que c'est justement les solutions que j'ai proposé en introduction :

Citation:
Une idée serait de les définir en global, et d'y accéder ensuite par le tableau $_GLOBALS, mais d'après ce qu'on m'a dit ici, des variables globales n'avaient pas beaucoup de sens dans des fonctions, et encore moins dans des objets.
Citation:
Ma dernière idée : utiliser les constantes.
Or ma question était justement : quelle est, par retour d'expérience et selon vous, la méthode la plus judicieuse ? Vu qu'apparament, selon beaucoup de personnes expérimentées, utiliser les "globales" dans les fonctions est très déconseillé.

Je repose ma question :
1. Utiliser une variable globale peut être une bonne alternative ici, en tant "qu'exception à la règle".
2. Définir un tas de constantes ne peut-il pas nuire aux peformances ?
Malikak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2006, 13h36   #9
Membre Expert
 
Inscription : juillet 2004
Messages : 1 033
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 1 033
Points : 1 050
Points : 1 050
Citation:
Une idée serait de les définir en global, et d'y accéder ensuite par le tableau $_GLOBALS, mais d'après ce qu'on m'a dit ici, des variables globales n'avaient pas beaucoup de sens dans des fonctions, et encore moins dans des objets.
Certes ce n'est pas super propre, mais comme tu l'à fait remarquer en procédurale il y à assez peu de solution.
Pour ma part en procedurale se sont des constantes, comme le dit ska. En objet, pourquoi ne pas passer par une classe spécifique avec des attributs static.

De toute façon l'un dans l'autre sa se ressemble, la seconde solution apporte juste un peu plus de cohérence, mais c'est tout.
ePoX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2006, 17h12   #10
Rédacteur
 
Avatar de Eric Berger
 
Inscription : octobre 2002
Messages : 340
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : octobre 2002
Messages : 340
Points : 475
Points : 475
Envoyer un message via ICQ à Eric Berger Envoyer un message via MSN à Eric Berger Envoyer un message via Skype™ à Eric Berger
Citation:
Envoyé par Malikak
1. Utiliser une variable globale peut être une bonne alternative ici, en tant "qu'exception à la règle".
Oui, je pense que c'est ce qui se pratique le plus dans ce genre de contexte, je ne parlerais même pas d'exception à la règle.
Citation:
Envoyé par Malikak
2. Définir un tas de constantes ne peut-il pas nuire aux peformances ?
Non, franchement je ne pense pas... reste à définir "un tas" mais si il ne s'agit pas de milliers de constante, le temps de chargement est insignifiant.
Eric Berger est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2006, 10h15   #11
Invité de passage
 
Inscription : juin 2006
Messages : 11
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 11
Points : 2
Points : 2
Désolé pour le retard.


Citation:
Envoyé par ePoX
De toute façon l'un dans l'autre sa se ressemble, la seconde solution apporte juste un peu plus de cohérence, mais c'est tout.

En quoi cela apporte plus de cohérence ?
Je trouve ça plus dur à gérer, justement, si toutes les variables de configurations ne sont pas dans un même fichier (par exemple, inutile de charger la configuration du forum sur le blog, et inversement... mais certains variables sont communes aux deux.)
Malikak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2006, 10h43   #12
Membre habitué
 
Inscription : janvier 2006
Messages : 140
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 140
Points : 131
Points : 131
pour moi : constantes
drommk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2006, 10h58   #13
Rédacteur
 
Avatar de Eric Berger
 
Inscription : octobre 2002
Messages : 340
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : octobre 2002
Messages : 340
Points : 475
Points : 475
Envoyer un message via ICQ à Eric Berger Envoyer un message via MSN à Eric Berger Envoyer un message via Skype™ à Eric Berger
Citation:
Envoyé par Malikak
En quoi cela apporte plus de cohérence ?
Je trouve ça plus dur à gérer, justement, si toutes les variables de configurations ne sont pas dans un même fichier (par exemple, inutile de charger la configuration du forum sur le blog, et inversement... mais certains variables sont communes aux deux.)
Il faut tenir compte du coût que ça représente (quantité de travail) et de charger quelques dizaines de paramètres a un coût insignifiant. On donnera par exemple plus d'importance à choisir quelles requêtes SQL sont nécessaires car elles sont plus gourmandes en ressources. Pourtant, pour charger une page du forum de developpez, le serveur fera plusieurs dizaines de requêtes et le chargement n'est pas lent pour autant, même avec plusieurs centaine d'utilisateurs simultanés.

Toute cette explication pour que tu relativise un peu le problème de performances lié au chargement de quelques variables.

Conclusion: choisis ce qui est le plus pratique pour toi, sans te demander si c'est la solution la plus performante.
Eric Berger est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2006, 12h32   #14
Membre Expert
 
Inscription : juillet 2004
Messages : 1 033
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 1 033
Points : 1 050
Points : 1 050
Citation:
Citation:
ePoX a écrit :
De toute façon l'un dans l'autre sa se ressemble, la seconde solution apporte juste un peu plus de cohérence, mais c'est tout.



En quoi cela apporte plus de cohérence ?
Je trouve ça plus dur à gérer, justement, si toutes les variables de configurations ne sont pas dans un même fichier (par exemple, inutile de charger la configuration du forum sur le blog, et inversement... mais certains variables sont communes aux deux.)
Dans un projet fait entièrement en objet utilisé une classe avec des attributs static est plus cohérent dans l'écriture car tu passes tout le temps par des classes, et non pas des valeurs défini hors des classes comme les constantes défini avec la focntion define().

Encore une fois l'un dans l'autre c'est pareil au final, c'est juste deux manière différentes de produire le même résultat, l'une porte plutot la marque d'un code procédural, et l'autre la marque d'un code objet.
ePoX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2006, 13h22   #15
Rédacteur
 
Avatar de wamania
 
Développeur Web
Inscription : juillet 2003
Messages : 676
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juillet 2003
Messages : 676
Points : 678
Points : 678
je serais plus pour une classe "statique" style singleton.
dans chaque fonction
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$config = CMyConfig::getConfig();
 
avec 
class CMyConfig
{
    private $tab_config;
 
    static function getConfig()
    {
        si $tab_config existe, return $tab_config
        sinon $this->createConfig() et return $tab_config;
    }
 
    private function createConfig()
    {
        charge tes configs dans $tab_config;
    }
}
ceci dit, j'utilise aussi des globals, et ça me gène pas vraiment. Tout dépend du besoin de "propreté"
__________________
Articles sur developpez.com
- Gestion des exceptions avec PHP5
- Chiffrement et hash en PHP contre l'attaque Man in the middle
- Aedituus - Espace membre sécurisé en PHP5

Lithium : ORM ActiveRecord PHP5 extrêmement léger
wamania est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2006, 15h43   #16
Invité de passage
 
Inscription : juin 2006
Messages : 11
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 11
Points : 2
Points : 2
Ben merci à tous pour réponses
Malikak 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 23h30.


 
 
 
 
Partenaires

Hébergement Web