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 php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
$membre = Modele::load("membre")
...
$membre->read(); // message d'erreur
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 php : 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
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 php : Sélectionner tout - Visualiser dans une fenêtre à part
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.