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
Code : Tout sélectionner
<?php
class bdd {
private static $_instance = null;
protected $connexion;
public function __construct() {
echo 'constructeur bdd<br />';
try {
echo 'instanciation pdo<br />';
$this->connexion = new PDO('mysql:host='.SERVEUR.';port=3306;dbname='.BASE, LOGIN, PWD);
var_dump($this->connexion);
}
catch(Exception $e)
{
echo 'Erreur : '.$e->getMessage().'<br />';
echo 'N° : '.$e->getCode();
die();
}
}
final public static function getInstance() {
if(is_null(self::$_instance)) {
self::$_instance = new bdd();
}
return self::$_instance;
}
/*
public function connexion()
{
return $this->_connexion;
}
*/
private function __clone()
{
}
}
?>Code : Tout sélectionner
<?php
class acteurMapping extends bdd {
private $_table;
private $_index;
//private $_db;
public function __construct() {
echo 'constructeur acteurMapping<br />';
$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.'<br />'; // on affiche les acteurs
}
$resultats->closeCursor(); // on ferme le curseur des résultats
}
}
?>Code : Tout sélectionner
<?php
include('entete_php.php');
$listeActeur = new acteurMapping();
$listeActeur->listeActeur();
?>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.
Merci à celle et ceux qui prendront du temps pour m'aider
Justin