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 :

extending PDO - parent::__construct() [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 314
    Points : 217
    Points
    217
    Par défaut extending PDO - parent::__construct()
    Bonjour ,

    j'essaye de créer une classe de connexion personnalisée en héritant la classe PDO, et je tente ce créer une instance en appelant le constructeur parent . code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->dbconn = parent::__construct($dsn, $user, $pw);
    la valeur retournée est Null .
    est ce qu'il y a une explication .
    merci

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    l'explication est simple : le constructeur parent ne devrait être appelé sous cette forme parent::__construct() qu'à partir du constructeur enfant.
    Ailleurs dans le code, tu dois passer par le mot clé new qui crée une instance d'une classe et passe à travers le constructeur de cette dernière.
    La fonction seule parent::__construct() ne renvoie rien par contre new renvoie une instance.

    D'ailleurs dériver PDO n'a pas beaucoup d'intérêt. Il vaut mieux encapsuler PDO dans une classe de manipulation avancée des données.

  3. #3
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 314
    Points : 217
    Points
    217
    Par défaut
    Bonjour rawsrcet merci pour ta réponse.

    effectivement j'appel le : parent::__construct() de façon statique dans le constructeur de ma classe qui extends PDO.

    j' ai tenter ça car je me suis basé sur la doc : http://php.net/manual/fr/pdo.construct.php :


    PDO::__construct — Crée une instance PDO qui représente une connexion à la base

    bon je refais le code en passant par l'instanciation avec new ...

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    Citation Envoyé par van-bom Voir le message
    effectivement j'appel le : parent::__construct() de façon statique dans le constructeur de ma classe qui extends PDO.
    Fallait le préciser d'entrée de jeu.
    Je ne vois pas la logique derrière ton approche : tu dis que ta classe dérive de PDO donc ta classe est une instance de PDO et donc au même titre que PDO c'est déjà une connexion à la base de données.
    Donc là où ça coince c'est pourquoi tu veux conserver un $this->dbconn dans ta classe dérivée, parce que cela revient à conserver un pointeur dans la classe qui pointe vers une instance d'elle-même !!!?!?

  5. #5
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 314
    Points : 217
    Points
    217
    Par défaut
    Bonjour , j'ai laissé tomber le code ......

    mais mon soucis était ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class my_PDO extends PDO{
         public $dbconn;
         function __construct(){
            $this->dbconn = parent::__construct($dns, $user, $pw);
         }
          // reste des fonctions.....
    }
    $this->dbconn retourne null .

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Donc le souci était bien un problème de logique :

    Citation Envoyé par rawsrc Voir le message
    Je ne vois pas la logique derrière ton approche : tu dis que ta classe dérive de PDO donc ta classe est une instance de PDO et donc au même titre que PDO c'est déjà une connexion à la base de données.
    Donc là où ça coince c'est pourquoi tu veux conserver un $this->dbconn dans ta classe dérivée, parce que cela revient à conserver un pointeur dans la classe qui pointe vers une instance d'elle-même !!!?!?
    Juste pour mémo :
    dans un constructeur, tu es limité qu'à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function __construct() 
    {
        parent::__construct($dns, $user, $pw);
    }
    Pense d'ailleurs à toujours rajouter la visibilité à tes fonctions public protected private

  7. #7
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 314
    Points : 217
    Points
    217
    Par défaut
    oui , j'ai cru que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public function __construct() 
    {
        parent::__construct($dns, $user, $pw);
    }
    est équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $variableConx = new PDO($dns , $user , $pw);
    puisque dans la doc officielle le constructeur PDO retourne une connexion .

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

Discussions similaires

  1. Inclure un composant (extends Parent) dans un GripPane
    Par Doudoupe dans le forum JavaFX
    Réponses: 1
    Dernier message: 16/11/2012, 16h30
  2. [Smarty] Please use parent::__construct() to call parent constuctor
    Par themostmd dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 07/04/2011, 23h02
  3. Comment reloader la frame parent?
    Par mythtvtalk.com dans le forum ASP
    Réponses: 3
    Dernier message: 27/08/2003, 11h40
  4. Conception d'une classe parente
    Par VincentB dans le forum Langage
    Réponses: 9
    Dernier message: 24/06/2003, 17h28
  5. DLL, affichage et parent...
    Par KRis dans le forum Composants VCL
    Réponses: 6
    Dernier message: 13/12/2002, 17h01

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