CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Classe abstraite connexion SQL PHP

Cainzer
Cainzer
Niveau 10
14 mai 2013 à 15:22:25

:salut:

Je suis en train de débuter dans la programmation orientée objet. J'ai demandé à un ami comment faire pour ne pas avoir à refaire la connexion à la base de données sur chaque classe ou j'ai besoin de faire des requêtes SQL. Celui-ci m'a parlé des classes abstraites.
Je me suis alors essayé à créer une classe abstraite mais je dois dire que je ne comprend pas bien comment je pourrais récupérer la variable contenant la connexion à la base de données dans les classes qui héritent de la classe abstraite.
Auriez vous un exemple pour m'aider ?

Tiddo
Tiddo
Niveau 10
14 mai 2013 à 16:34:11

PDO.
http://php.net/manual/fr/intro.pdo.php

Tiddo
Tiddo
Niveau 10
14 mai 2013 à 16:34:24

http://fmaz.developpez.com/tutoriels/php/comprendre-pdo/

Cainzer
Cainzer
Niveau 10
14 mai 2013 à 17:00:56

J'utilise déjà PDO.
Mais comment faire pour l'appliquer à chaque classe sans refaire une connexion à chaque fois ?
L'idéal serait d'inclure un fichier contenant PDO avant chaque classe. Je sais le faire sans problème en PHP "normal", mais comment le faire correctement en objet ?

vava740
vava740
Niveau 10
14 mai 2013 à 17:32:31

Tu peux instancier le PDO de façon statique dans le constructeur de ta classe abstraite, et le mettre dans une propriété protégée de ta classe ($this->pdo par exemple).

Ainsi, toutes les classes qui étendront ta classe abstraite auront accès à $this->pdo (sans pour autant que le PDO soit instancié à chaque fois).

Cainzer
Cainzer
Niveau 10
14 mai 2013 à 18:46:33

Merci bien ça marche impec ;-)

Cainzer
Cainzer
Niveau 10
14 mai 2013 à 22:21:26

Ça marche pas si impec que ça en fait ^^ Je retourne vers vous :p)

En fait si je fais hériter à une classe qui n'a pas de constructeur tout va bien.
Mais si ma classe a un constructeur la variable $this->bdd que j'ai créé dans la classe abstraite est tout simplement vide.

Comment résoudre ce problème ?

vava740
vava740
Niveau 10
15 mai 2013 à 07:35:14

C'est normal, quand tu mets un constructeur dans un classe "fille", il masque le constructeur parent qui ne sera jamais appelé si tu ne le fais pas explicitement.

Pour appeler une fonction de la classe parente tu peux faire ça (ici la fonction __construct) :

parent::__construct();

Cainzer
Cainzer
Niveau 10
15 mai 2013 à 20:58:39

Effectivement ça fonctionne merci :)
En revanche est-ce bien propre de faire comme ça ? Parce que j'avais redemandé à mon pote, et il m'a pas du tout dit la même chose. Mais j'arrive pas à faire ce qu'il m'a dit.
Soit disant que dans la classe abstraite je devais faire un truc du genre :
abstract protected function __construct();

Pseudo supprimé
Pseudo supprimé 15 mai 2013 à 21:29:49

Tu peux aussi ajouter ceci au début de tes méthodes :

global $PDO;

Pseudo supprimé
Pseudo supprimé 15 mai 2013 à 21:35:59

Ah, j'avais mal lu l'énoncé ; au temps pour moi.

vava740
vava740
Niveau 10
16 mai 2013 à 10:50:45

@Cainzer: Je sais pas exactement ce que ton ami voulait faire... le fait de déclarer __construct() comme étant abstraite obligerait toutes tes classes filles à implémenter le constructeur, mais à vrai dire ça n'a strictement aucun intérêt de faire ça sur un constructeur puisqu'il n'y a pas de contrainte sur la signature de cette méthode... ça pourrait être intéressant sur une autre méthode pour forcer les classes filles à prendre certains arguments de type particulier, mais sur un constructeur je vois pas. :(

De plus en faisant comme ça, tu serais obligé d'instancier le PDO dans chaque classe fille (on perd le signleton et ça te force à réécrire du code).

Après il voulait peut-être que tu fasse une injection de dépendance dans tes modèles (même si je suis pas convaincu vu qu'il ne précise pas d'interface de connexion en paramètre du constructeur abstrait), je penses pas que ce soit judicieux dans ton cas, surtout pour débuter.

C'est intéressant sur une application qui a une certaine envergure, mais clairement, je ne te conseille pas de te lancer là-dedans alors que tu débutes en objet.

Si ça t'intéresse tu peux toutefois lire cet article qui décrit une façon relativement propre de procéder pour ce que tu souhaites faire : http://net.tutsplus.com/tutorials/php/how-to-write-testable-and-maintainable-code-in-php/

Quoi qu'in en soit la méthode du parent::__construct() avec l'instanciation du PDO dans la classe abstraite est déjà intéressante, je considère pas ça comme était une mauvaise pratique même si on peut aller beaucoup plus loin comme le montre l'article ci-dessus.

Cainzer
Cainzer
Niveau 10
16 mai 2013 à 11:24:18

Ok merci bien.
En fait il m'avait précisé plus mais comme c'était à l'oral j'ai oublié --'

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment