IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[SQL] Les données de configuration d'un script


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 11
    Points : 5
    Points
    5
    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 ?

  2. #2
    Membre régulier

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 94
    Points : 120
    Points
    120
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    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...

  4. #4
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    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 127
    Points : 2 557
    Points
    2 557
    Par défaut
    tu laisses ça dans une page .php et tu l'inclus quand tu en as besoin.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    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.

  6. #6
    Membre éclairé
    Avatar de Eric Berger
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2002
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2002
    Messages : 346
    Points : 663
    Points
    663
    Par défaut
    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

  7. #7
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

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

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    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.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    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 :

    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.
    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 ?

  9. #9
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    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.

  10. #10
    Membre éclairé
    Avatar de Eric Berger
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2002
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2002
    Messages : 346
    Points : 663
    Points
    663
    Par défaut
    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.

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    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.)

  12. #12
    Membre habitué
    Inscrit en
    Janvier 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 140
    Points : 151
    Points
    151
    Par défaut
    pour moi : constantes

  13. #13
    Membre éclairé
    Avatar de Eric Berger
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2002
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2002
    Messages : 346
    Points : 663
    Points
    663
    Par défaut
    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.

  14. #14
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    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.

  15. #15
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Points : 1 071
    Points
    1 071
    Par défaut
    je serais plus pour une classe "statique" style singleton.
    dans chaque fonction
    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
    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é"

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Ben merci à tous pour réponses

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL 2008] Générer une script de base avec seulement les données
    Par abbepierre94 dans le forum Développement
    Réponses: 3
    Dernier message: 23/09/2012, 11h51
  2. [MySQL] transmettre les données d'un formulaire à un script php à l'aide svp
    Par momoh dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 10/04/2007, 16h30
  3. Script sql recupérant la structure ET les données.
    Par __fabrice dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 04/01/2006, 15h17
  4. [SQL Server 2000] Générer le script SQL des données
    Par Giovanny Temgoua dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 31/03/2005, 19h35
  5. Génération de script SQL avec les données
    Par borgfabr dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/03/2004, 14h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo