Bonjour,
Je fais mes premiers pas dans le php objet couplé à pdo, avec le pattern singleton.
J'ai fait une classe bdd qui me connecte à la bdd, avec un singleton pour réutiliser la même instance pour chaque objet, et j'ai écrit une classe acteurMapping pour aller chercher des données dans ma bdd, une classe qui hérite de bdd. Mais j'ai un bug et je câle et il y a bien sur quelque chose, une logique de php objet (ou de l'objet tout court) qui m'échappe...
Voici mon code :
bdd.php
acteurMapping.php
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 <?php class bdd { private static $_instance = null; protected $connexion; public function __construct() { echo 'constructeur bdd'; try { echo 'instanciation pdo'; $this->connexion = new PDO('mysql:host='.SERVEUR.';port=3306;dbname='.BASE, LOGIN, PWD); var_dump($this->connexion); } catch(Exception $e) { echo 'Erreur : '.$e->getMessage(); echo 'N° : '.$e->getCode(); die(); } } final public static function getInstance() { if(is_null(self::$_instance)) { self::$_instance = new bdd(); } return self::$_instance; } private function __clone() { } } ?>
Quand j'instancie acteurMapping et que j'exécute la méthode listeActeur, j'ai le message :
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 <?php class acteurMapping extends bdd { private $_table; private $_index; //private $_db; public function __construct() { echo 'constructeur acteurMapping'; $this->getInstance(); var_dump($this->connexion); $this->_table = "participant"; $this->_index = "idParticipant"; } public function listeActeur() { $resultats=$this->connexion->query('SELECT nomPart, prenomPart FROM '.$this->_table.' ORDER BY nomPart ASC'); $resultats->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet while( $ligne = $resultats->fetch() ) // on récupère la liste des acteurs { echo $ligne->nomPart.' '.$ligne->prenomPart; // on affiche les acteurs } $resultats->closeCursor(); // on ferme le curseur des résultats } } ?>
constructeur acteurMapping
constructeur bdd
instanciation pdo
object(PDO)#3 (0) { } NULL
Fatal error: Call to a member function query() on a non-object in C:\Program Files\EasyPHP 3.0\www\pdo\class\acteurMapping.php on line 23
et donc l'attribut connexion qui est nul.
A priori, si je lis les echo, ça fait :
. appel du constructeur de acteurMapping
. appel de la fonction getInstance de bdd
. appel du constructeur de bdd
. affectation d'un objet pdo à l'attribut connexion de bdd
. bug : non affectation d'un objet pdo à l'attribut connexion de acteurMapping pourtant hérité
Merci à celle et ceux qui prendront du temps pour m'aider
Justin
Partager