Utilisation de PDO dans un contexte statique
Bonjour à toutes et à tous,
Je suis sur un problème depuis un bon moment dont j'ai du mal à trouver la solution ...
En effet, j'ai crée une classe abstraite Modele (qui ne peut donc pas être instancié) contenant une méthode statique load($nom) permettant de charger un modele en fonction de son nom donné en paramètre.
J'invoque la méthode statique de cette façon
Code:
1 2 3
| $membre = Modele::load("membre")
...
$membre->read(); // message d'erreur |
Citation:
Call to a member function prepare() on a non-object
Je comprends bien le message d'erreur mais comment procéder pour utiliser PDO dans un contexte statique.
modele.php
Code:
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
| abstract class Modele {
public $table;
public $id;
// traitement pour la lecture des donnees dans la table
public function read($fields = null) { // $fields represente les champs de la table categories
if ($fields == null) {
$fields = "*";
}
$db = DBConnect::getBDD(); // on se connecte à la Base de données
$sql = "SELECT $fields FROM " . $this->table . " WHERE mid =" . $this->id; // $this->id fait reference a l'identifiant de l'enregistrement que l'on veut recuperer
$stm = $db->prepare($sql); // on prepare la requete a executer sur le serveur
$stm->execute(); // on execute la requete preparee
// PDO::FETCH_ASSOC: retourne un tableau indexe par le nom de la colonne comme retournee dans le jeu de resultats
$data = $stm->fetch(PDO::FETCH_ASSOC); // $data est un tableau indexe
foreach ($data as $k => $v) { // un tableau associatif
$this->$k = $v; // on associe la cle recupere avec sa valeur
}
//return $data;
$db = null; // on ferme la connexion
}
public static function load($nom) { // $nom correspond au nom du fichier charge
require("$nom.php"); // le fichier contenant l'interaction avec la Base de donnees
return new $nom(); // on retourne une instance de l'objet charge
} // fin static function load($nom) |
index.php
Code:
1 2 3 4 5 6 7
|
$db = DBConnect::getBDD(); // on se connecte à* la Base de données
$membre = Modele::load("membre");
$membre->mid = 2;
$membre->read();
echo $membre->pseudo; |
Merci d'avance.
Transact.