Page 1 sur 1

Quand déclarer les variables dans les classes ?

Posté : 17 oct. 2021, 10:59
par mglx
Bonjour,
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();

Re: Quand déclarer les variables dans les classes ?

Posté : 21 janv. 2022, 21:35
par jobi1722
 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;
 }
 }
 
Tu utilises la variable local $db donc ca ne génère pas d'erreur vu que tu ne l'utilises pas.
 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
 }
 }
 
 // ==============================
 
Ici il doit être déclaré. Je pense que cela ne génére pas d'erreur ca tu l'écris dès la construction de l'objet.
 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();
 
Ici il ne sert à rien.

Bonne soirée.