Je n'ai pas compris quand il faut déclarer les variables dans les classes. Dans mon exemple, je n'ai pas déclaré et cela marche très bien (j'ai mis la variable $db en commentaire) :
Code : Tout sélectionner
class Database {
// protected $db; // Faut-il mettre ???
public static function connectDB() { /* Une Méthode Statique (pas besoin de faire new Database() pour y accéder) */
$db = new PDO('mysql:host=localhost; dbname=nombdd; charset=utf8', 'root', '', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING, /* Active les erreurs SQL */
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC /* On récupère tous les résultats en tableau associatif indexé par Nom de colonne */
]);
return $db;
}
}
// ==============================
abstract class Model { /* abstract pour dire qu"il ne sert qu'à l'héritage. Empêche de faire new Model() */
// protected $db; // Faut-il mettre ???
public function __construct() {
$this->db = Database::connectDB(); // Accès à une Méthode Statique. Connexion à la base de données
}
}
// ==============================
class Movie extends Model {
// protected $db; // Faut-il mettre ???
public function findAllMovie() {
$query = $this->db->query('SELECT * FROM movie ORDER BY id DESC');
$movies = $query->fetchAll(PDO::FETCH_OBJ); // En PHP Objet, ne pas oublier le paramètre PDO::FETCH_OBJ, sinon ça ne marche pas
return $movies;
}
public function showAllMovie() {
foreach ($this->findAllMovie() as $movie) {
echo '<div><a href="watching.php?id='.$movie->slug.'"><img src="assets/img/'.$movie->cover.'" alt="'.$movie->title.'"></a></div>';
}
}
}
$movie = new Movie();
$movie->showAllMovie();