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

Langage PHP Discussion :

POO et connexion à une base de données dans une fonction


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2
    Points : 1
    Points
    1
    Par défaut POO et connexion à une base de données dans une fonction
    Bonjour,
    Je me suis intéressé que très récemment à la POO et je me retrouve devant une interrogation qui, malgré mes recherches, m'apparait encore assez obscure.

    J'utilise par exemple une page accesDAO.php qui va contenir ceci (en gros) :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <?php
     
     class AccesDAO
        {
     
         /**
         * Recherche par id
         * @param id_acces l'id de l'acces
         * @return l'objet Acces correspondant
         */
        function rechercheAccesParId($id_acces) {
                try
                {
                $bdd = new PDO('mysql:host=localhost;dbname=name_DB', 'root', 'password');
                $bdd->exec('SET NAMES utf8');
                }
                catch (Exception $e)
                {
                die('Erreur : ' . $e->getMessage());
                }
     
            ...suite de la methode...                          
                }
     
        /**
         * Recuperation de la liste des acces configurés
         * @return List
         */
        public function getListeAcces() {
                try
                {
                 $bdd = new PDO('mysql:host=localhost;dbname=name_DB', 'root', 'password');
                $bdd->exec('SET NAMES utf8');
                }
                catch (Exception $e)
                {
                die('Erreur : ' . $e->getMessage());
                }
     
                ...suite de la methode....
        }
    ?>
    J'ai 2 questions dans mon exemple : la première est de savoir si la déclaration de l'attribut avant la méthode est obligatoire/vital/facultatif... J'ai lu un peu tout et n'importe quoi et surtout, des choses qui se contredisent.
    Alors plutôt en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public function getListeAcces() {
    ou simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function getListeAcces() {
    suffit.
    Merci d'éclairer ma lanterne.

    Et mon gros point noir vient dans l'accès à la DB en elle-même. Je trouve "très moche" de déclarer, pour chaque méthode de la class, les paramètres de connexion.
    N'existe-t-il donc pas, un genre de "super variable" qui pourrait contenir ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    try
                {
                $bdd = new PDO('mysql:host=localhost;dbname=name_DB', 'root', 'password');
                $bdd->exec('SET NAMES utf8');
                }
                catch (Exception $e)
                {
                die('Erreur : ' . $e->getMessage());
                }
    et que je rappellerais à chaque fois. Ce serait beaucoup plus propre et permettrait de ne pas avoir "x" modifications à effectuer en cas de changement des paramètres de la DB.

    Alors excusez moi par avance si ces questions vous semblent un peu idiotes mais en ce moment, elles retardent un peu l'avancée de mon projet car je n'ose trop poursuivre en restant dans le noir.

    Merci de votre aide donc

  2. #2
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 354
    Points : 410
    Points
    410
    Par défaut
    Bonjour,

    je n'utilise hélas pas les DAO, mais j'utilise la POO et

    public function getListeAcces()
    est une méthode (pour les classes). Elle est accessible par tes objets.

    function getListeAcces()
    est une fonction. Elle est accessible partout.

    Et bien entendu que non tu ne vas pas paramétrer tes données de connexions dans chaque méthode. Une fois suffit. Comme dans le mode procédural.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse mais donc, un soucis demeure présent dans mon esprit.
    Je déclare mes données de connexion à quel moment ?
    Car si je déclare pour la méthode rechercheAccesParId() et que j'appelle la méthode getListeAcces(), je n'aurais aucune information de connexion...et l'inverse est vraie aussi.
    Alors ça reste confus

  4. #4
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 354
    Points : 410
    Points
    410
    Par défaut
    Je ne connais pas la syntaxe de l'objet PDO, mais essaye de faire une seule classe pour ta connection, tu fais une seule fois ton connect, et c'est bon normalement.

  5. #5
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    La syntaxe sans mot-clef (public, private, protected) est un reste de la syntaxe PHP 4, qui n'avait pas encore implémenté ces mots-clefs. La syntaxe sans mot-clef reste valide pour rétro-compatibilité et faciliter le passage de PHP 4 à PHP 5. Sans mot-clef de visibilité, une méthode est par défaut publique.
    Donc si tu veux respecter la syntaxe PHP 5, tu dois utiliser ces mots-clefs de visibilité des méthodes (comme des propriétés).

    Un petit lien :
    http://www.php.net/manual/fr/languag...visibility.php

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 051
    Points : 1 638
    Points
    1 638
    Par défaut
    En effet il te faut déclarer qu'une seule fois les paramètres de connexion à la BDD.

    Soit tu as une solution très simple : tu créés une classe spécifique à la BDD genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Connexion
    {
    function __construct()
    {
        // Ton blabla de connexion
       return $con;
    }
    }
    Sur chaque page qui appelle une connexion BDD, tu déclares au début ta connexion, que tu peux envoyer en paramètre aux autres méthodes. Mais bon je trouve ça pas terrible comme solution.

    Sinon tu utilises les singleton en PHP. Sur cette conversation, quelqu'un propose une classe
    Règle N° 1 : Si tout va bien, ne touchez à rien.

Discussions similaires

  1. [MySQL] Remplacer une chaîne de caractères dans une base de données
    Par Furius dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 27/11/2013, 21h06
  2. [PDO] et connexion à une base de données dans une fonction
    Par ksper92 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 06/11/2012, 09h28
  3. inserer les données d'une base de données dans une autres?
    Par enstein8 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 14/10/2011, 13h33
  4. Réponses: 1
    Dernier message: 07/04/2010, 23h50
  5. ouvrir la connexion dans une base de données d'une maniére asynchrone
    Par ouadie99 dans le forum Accès aux données
    Réponses: 3
    Dernier message: 18/03/2008, 14h03

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